如何在 Kubernetes Nginx Ingress Controller 中将 Nginx IP 附加到 X-Forwarded-For
How to append Nginx IP to X-Forwarded-For in Kubernetes Nginx Ingress Controller
我想知道“如何将 Nginx IP 附加到 X-Forwarded-For”
我在 Ingress 注释中添加了片段。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ing
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";
但是在nginx.conf中好像是双重设置。
proxy_set_header X-Forwarded-For $remote_addr;
...
proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";
所以我的后端服务器会得到两个X-Forwarded-For
有人知道“如何禁用 Nginx Ingress Controller 生成的 proxy_set_header 部分”吗?
proxy_set_header X-Request-ID $req_id;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $best_http_host;
proxy_set_header X-Forwarded-Port $pass_port;
proxy_set_header X-Forwarded-Proto $pass_access_scheme;
proxy_set_header X-Scheme $pass_access_scheme;
您的配置片段没有被加倍,实际上发生的是当您在集群中部署 NGINX 控制器时默认情况下已经设置了 proxy_set_header X-Forwarded-For $remote_addr;
。
要禁用此默认设置,您需要使用 custom template。
通过这样做,您可以获得 nginx.conf 的 proxy_set_header X-Forwarded-For $remote_addr;
,因此您可以使用您描述的注释根据需要进行设置。
已接受的答案对我无效。您只需要将下面的 annotation 添加到 ingress 对象;
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "X-Forwarded-For $http_x_forwarded_for";
用于测试;
❯ curl -I https://example.com/path/here
HTTP/1.1 200 OK
cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Sat, 13 Mar 2021 08:52:02 GMT
expires: 0
pragma: no-cache
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
X-Forwarded-For: 88.888.8.8
Connection: keep-alive
只有使用 Helm 的 who end up here, an alternative (perhaps cleaner) solution, if you're deploying ingress-nginx 控制器的人才能在 values.yml
中将 compute-full-forwarded-for
和 use-forwarded-headers
设置为 true
。无需在 Ingress 中进行额外配置(如问题中的配置)。
我想知道“如何将 Nginx IP 附加到 X-Forwarded-For”
我在 Ingress 注释中添加了片段。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ing
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";
但是在nginx.conf中好像是双重设置。
proxy_set_header X-Forwarded-For $remote_addr;
...
proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";
所以我的后端服务器会得到两个X-Forwarded-For
有人知道“如何禁用 Nginx Ingress Controller 生成的 proxy_set_header 部分”吗?
proxy_set_header X-Request-ID $req_id;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $best_http_host;
proxy_set_header X-Forwarded-Port $pass_port;
proxy_set_header X-Forwarded-Proto $pass_access_scheme;
proxy_set_header X-Scheme $pass_access_scheme;
您的配置片段没有被加倍,实际上发生的是当您在集群中部署 NGINX 控制器时默认情况下已经设置了 proxy_set_header X-Forwarded-For $remote_addr;
。
要禁用此默认设置,您需要使用 custom template。
通过这样做,您可以获得 nginx.conf 的 proxy_set_header X-Forwarded-For $remote_addr;
,因此您可以使用您描述的注释根据需要进行设置。
已接受的答案对我无效。您只需要将下面的 annotation 添加到 ingress 对象;
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "X-Forwarded-For $http_x_forwarded_for";
用于测试;
❯ curl -I https://example.com/path/here
HTTP/1.1 200 OK
cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Sat, 13 Mar 2021 08:52:02 GMT
expires: 0
pragma: no-cache
vary: Origin,Access-Control-Request-Method,Access-Control-Request-Headers
X-Forwarded-For: 88.888.8.8
Connection: keep-alive
只有使用 Helm 的 values.yml
中将 compute-full-forwarded-for
和 use-forwarded-headers
设置为 true
。无需在 Ingress 中进行额外配置(如问题中的配置)。