You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用force-ssl时nginx-ingress出现过多重定向问题求助

解决Nginx-Ingress开启Force-SSL后的循环重定向问题

我在帮用户排查AWS环境下Nginx-Ingress的重定向问题时,经常碰到你这种情况——AWS负载均衡器(LB)终止SSL后,和Ingress控制器之间的协议识别错位导致循环重定向。咱们一步步来解决:

问题根源

你的AWS LB已经配置了SSL证书(通过aws-load-balancer-ssl-cert注解),负责终止用户的HTTPS请求,然后把流量转发给Nginx-Ingress控制器。但你给Service设置了backend-protocol: tcp,同时Ingress开启了force-ssl重定向,这就出问题了:

  • LB把HTTPS转成TCP流量发给控制器,控制器收到的请求看起来是HTTP的
  • 控制器看到HTTP请求,就触发force-ssl规则重定向到HTTPS
  • 用户浏览器跳转到HTTPS后,LB再次终止SSL转成TCP发给控制器,循环就此形成

解决方案

1. 让Ingress控制器识别原始请求协议

Nginx-Ingress需要知道用户的原始请求是HTTPS的,这得靠LB发送的X-Forwarded-Proto头部。我们要让控制器信任这个头部:

  • 如果是用Helm部署的Ingress控制器,修改values.yaml:
    controller:
      config:
        use-forwarded-headers: "true"
        forwarded-for-header: "X-Forwarded-For"
    
  • 如果是手动部署的,在控制器Deployment的启动参数里加:
    --use-forwarded-headers=true
    

2. 调整Ingress资源的注解

把旧的force-ssl-redirect换成新版的ssl-redirect(更推荐),同时添加信任代理头部的注解,还要限制信任的IP段防止头部伪造:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
    # 替换成你的VPC CIDR或者AWS LB的IP范围
    nginx.ingress.kubernetes.io/proxy-real-ip-cidr: "10.0.0.0/8"
spec:
  # 你的Ingress规则配置...

3. 优化AWS LB的Service配置

把backend-protocol从tcp改成http,这样LB会正确添加X-Forwarded-Proto等代理头部,而不是裸TCP转发:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "ingress-nginx",
    "namespace": "...",
    "labels": {
      "k8s-addon": "ingress-nginx.addons.k8s.io"
    },
    "annotations": {
      "service.beta.kubernetes.io/aws-load-balancer-backend-protocol": "http",
      "service.beta.kubernetes.io/aws-load-balancer-proxy-protocol": "*",
      "service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "a..."
    }
  },
  "spec": {
    "ports": [
      {
        "name": "http",
        "port": 80,
        "targetPort": 80
      },
      {
        "name": "https",
        "port": 443,
        "targetPort": 80
      }
    ],
    # 其他Service配置(比如type: LoadBalancer)...
  }
}

做完这些调整后,控制器就能正确识别原始请求是HTTPS的,不会再触发不必要的重定向,循环问题就解决了。

内容的提问来源于stack exchange,提问作者Jonny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:25:12