nginx ingress 透传ip给后端服务
- 用户的访问链路
域名-》dns-》nginx ingres-》后端服务 - 为什么要把ip透传给后端服务?
用户通过下面的方式在X-Forwarded-For加入了ip,导致后端服务会收到两个ip 2.1.1.1和用户的真实ip
curl --location 'https://sumumu.top/send_code?_t=1749528526735' \
--header 'accept: application/json, text/plain, */*' \
--header 'accept-language: zh-CN,zh;q=0.9' \
--header 'content-type: application/json;charset=UTF-8' \
--header 'device-id: 1_iVG3dzWVepBQr5U7SIG' \
--header 'dnt: 1' \
--header 'language: en-US' \
--header 'login-token;' \
--header 'origin: https://www.sumumu.top' \
--header 'priority: u=1, i' \
--header 'referer: https://www.sumumu.top/' \
--header 'sec-ch-ua: "Chromium";v="137", "Not/A)Brand";v="24"' \
--header 'sec-ch-ua-mobile: ?0' \
--header 'sec-ch-ua-platform: "macOS"' \
--header 'sec-fetch-dest: empty' \
--header 'sec-fetch-mode: cors' \
--header 'sec-fetch-site: same-site' \
--header 'sec-gpc: 1' \
--header 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36' \
--header 'X-Forwarded-For: 2.1.1.1' \
--data-raw '{"email":"211@111.com","type":2}'
- 配置参数
方法1: 在nginx.ingress.kubernetes.io/configuration-snippet 注解中添加下面的参数
proxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Real-IP $remote_addr;
方法 2:使用 nginx.ingress.kubernetes.io/use-forwarded-headers
可以 关闭 Ingress Controller 自动处理 X-Forwarded-For 的行为,但这方式不推荐你使用,如果你要完全控制头部设置还是建议用方法 1
方法3: 修改 ConfigMap(对全局生效)
找到你的 nginx-ingress 控制器所使用的 ConfigMap(通常叫 nginx-ingress-controller 或 ingress-nginx-controller),在其中添加:
data:
use-forwarded-headers: "false"
然后你再用 annotations 去覆盖 X-Forwarded-For。还是推荐使用方法1
- 验证
检查后端日志中打印了几个ip地址,以及打印的是谁的ip地址