K8s用Ingress Nginx部署Ghost博客出现too many redirects错误如何解决?
问题根因
你遇到的重定向死循环是两层反向代理的协议识别逻辑冲突导致的:
- 外层Nginx已经完成SSL卸载,将HTTPS请求转为HTTP请求发往K8s集群内的Ingress Nginx
- 默认配置下Ingress Nginx不信任外层代理传过来的
X-Forwarded-Proto头,会判断当前请求是HTTP协议,自动触发跳转到HTTPS地址的逻辑 - 跳转后的请求再次走外层Nginx转HTTP进集群,循环往复就触发了too many redirects错误
修复方案
1. 修改Ingress配置增加注解
在Ingress的metadata.annotations段增加以下两个配置,关闭Ingress侧的自动SSL跳转,同时开启对外层代理头的信任:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-blog annotations: # 关闭Ingress侧的HTTP自动跳HTTPS,跳转逻辑已经在外层Nginx实现 nginx.ingress.kubernetes.io/ssl-redirect: "false" # 信任外层代理传递的X-Forwarded-*头,正确识别原始请求协议 nginx.ingress.kubernetes.io/use-forwarded-headers: "true" spec: rules: - host: my-blog.com http: paths: - backend: service: name: my-blog port: number: 2368 path: / pathType: Prefix
2. 可选补充配置
如果修改Ingress后仍然有问题,可以在Ghost的Deployment环境变量中增加NODE_ENV=production,确保Ghost正确读取代理传递的协议头判断请求来源,你当前配置的url: https://my-blog.com是正确的,不需要修改。
3. 外层Nginx配置无需改动
你当前外层Nginx已经配置了proxy_set_header X-Forwarded-Proto https;,头传递逻辑正确,不需要调整。
内容的提问来源于stack exchange,提问作者evp
相关产品推荐
相关产品推荐

