Nginx 的 X-Forwarded-For(XFF)http 标头字段是否混淆?

Nginx 的 X-Forwarded-For(XFF)http 标头字段是否混淆?

我们的网络服务器设置如下

负载均衡器(HAPROXY)<---> Nginx <---> 应用服务器

为了让 Nginx 知道正在建立连接的真实客户端,我使用 HttpRealIpModule 编译了 Nginx,并进行了配置更改。HAPROXY 还配置为转发 XFF 标头。如果客户端使用公共 IP 地址浏览,Nginx 至少部分正确(我的观察)。如果客户端具有私有 IP 并位于 SQUID 等另一个客户端代理之后,我将获得客户端的私有 IP,而不是私有 IP 进行 NAT 的公共 IP。根据 Nginx 模块文档[http://wiki.nginx.org/HttpRealIpModule],HttpRealIpModule 应该获取 X-Forwarded-For 标头中的最后一个 IP 以进行替换。以下是使用 Squid 代理的私有 IP 的客户端的 NGREP 转储

T 192.168.255.1:53777 -> 192.168.153.164:80 [AP]
.1315664739.21; __utmb=82961925.3.10.1315664739; __utmc=82961925;         __utmz=82961925.1315664739.21.21.utmcsr=domainname.com|utmccn=        (referral)|utmcmd=referral|utmcct=/users/sign_in; SnapABugHistory=206
#..If-None-Match: "cc1ff315751caad21aea3dfd5392a56a"..Via: 1.1 atmosphere.sprout.lan:3128    (squid/2.7.STABLE9)..X-Forwarded-For: 192.168.3.111..Cache-Control: max-age=259200..X-Forwarded-For:    116.90.235.11.... 

此处的 XFF 标头是 ambient.sprout.lan:3128 (squid/2.7.STABLE9)..X-Forwarded-For: 192.168.3.111..Cache-Control: max-age=259200..X-Forwarded-For: 116.90.235.11。

标头中看到的最后一个 IP 是 116.90.235.11,但 nginx 的日志文件显示客户端的私有 IP 是 192.168.2.111

这是正常的吗?

答案1

这种情况可能由于多种原因而发生。Nginx 首先是一个代理,因此它将保留 HTTP 标头。因此,如果您的 HAproxy(或者即使用户的 LAN 代理)已经提供了 X-Forwarded-For,您很有可能会通过所有代理(HAproxy -> nginx -> 后端)保留它。

相关内容