如何将 Nginx IP 附加到 Kubernetes Nginx Ingress Controller 中的 X-Forwarded-For

Ram*_*sXu 8 nginx kubernetes kubernetes-ingress nginx-ingress

我\xe2\x80\x99\xe2\x80\x99m想知道\xe2\x80\x9c如何将Nginx IP附加到X-Forwarded-For\xe2\x80\x9d

\n\n

我在 Ingress 注释中添加了片段。

\n\n
apiVersion: networking.k8s.io/v1beta1\nkind: Ingress\nmetadata:\n  name: ing\n  annotations:\n    nginx.ingress.kubernetes.io/configuration-snippet: |\n      proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它似乎在 nginx.conf 中进行了双重设置。

\n\n
    proxy_set_header X-Forwarded-For        $remote_addr;\n...\n    proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我的后端服务器将得到两个X-Forwarded-For

\n\n

有人知道\xe2\x80\x9c如何禁用Nginx Ingress Controller\xe2\x80\x9d生成的proxy_set_header部分吗?

\n\n
        proxy_set_header X-Request-ID           $req_id;\n        proxy_set_header X-Real-IP              $remote_addr;\n\n        proxy_set_header X-Forwarded-For        $remote_addr;\n\n        proxy_set_header X-Forwarded-Host       $best_http_host;\n        proxy_set_header X-Forwarded-Port       $pass_port;\n        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;\n\n        proxy_set_header X-Scheme               $pass_access_scheme;\n
Run Code Online (Sandbox Code Playgroud)\n

小智 8

接受的答案对我不起作用。您只需将以下注释添加到入口对象即可;

\n
nginx.ingress.kubernetes.io/configuration-snippet: |\n      more_set_headers "X-Forwarded-For $http_x_forwarded_for";\n
Run Code Online (Sandbox Code Playgroud)\n

供测试用;

\n
\xe2\x9d\xaf curl -I https://example.com/path/here\n\nHTTP/1.1 200 OK\ncache-control: no-cache, no-store, max-age=0, must-revalidate\nDate: Sat, 13 Mar 2021 08:52:02 GMT\nexpires: 0\npragma: no-cache\nvary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers\nX-Forwarded-For: 88.888.8.8\nConnection: keep-alive\n
Run Code Online (Sandbox Code Playgroud)\n


Mar*_*ney 5

你的配置片段并没有被加倍,实际上发生的事情是proxy_set_header X-Forwarded-For $remote_addr;当你在集群中部署 NGINX Controller 时已经默认设置了。

为了禁用此默认设置,您需要使用自定义模板

通过这样做,您可以免费获得 nginx.conf proxy_set_header X-Forwarded-For $remote_addr;,以便您可以使用您所描述的注释根据需要进行设置。


Rad*_*Rad 5

对于遇到类似问题并最终来到这里的人来说,如果您使用 Helm部署ingress-nginxcompute-full-forwarded-for控制器,则另一种(可能更干净)的解决方案是use-forwarded-headerstrue您的values.yml. 不需要在 Ingress 中进行额外的配置(如问题中的配置)。