【发布时间】:2021-06-11 01:56:59
【问题描述】:
我在 EKS 上遇到了 nginx 入口控制器 (ingress-nginx v0.44.0) 的问题,其中 X-Forwarded-* 标头设置为控制器 pod 正在运行的 kubernetes 工作节点,而不是实际用户点击控制器本身的请求的详细信息。 当我们在入口控制器上终止 SSL 时,这意味着“X-Forwarded-Proto”设置为“http”而不是“https”,这会导致应用程序 pod 出现问题。
我部署了一个test pod,它返回它收到的标头以确认问题,我可以看到这些标头已收到:
X-Forwarded-For: <ip of the eks worker node>
X-Forwarded-Host: foo.bar.net
X-Forwarded-Port: 8000
X-Forwarded-Proto: http
我期待这些:
X-Forwarded-For: <ip of the origin of the original request>
X-Forwarded-Host: foo.bar.net
X-Forwarded-Port: 443
X-Forwarded-Proto: https
现在,我们确实有一个旧的旧集群运行一个旧的 nginx 入口控制器 (nginx-ingress v0.34.1),它的行为实际上与我预期的一样,但我正在努力寻找它是如何配置的这是正确的。 我确实注意到此控制器的 nginx.conf 包含与 described here 相同的“full_x_forwarded_proto”变量,但我找不到任何配置为 configmap 或类似内容的地方。
map $http_x_forwarded_proto $full_x_forwarded_proto {
default $http_x_forwarded_proto;
"" $scheme;
}
有人对我如何配置 nginx 以发送正确的“X-Forwarded-*”标头有任何建议吗?
【问题讨论】: