我们有Web服务器设置如下
Loadbalancer(HAPROXY)<—> Nginx <—> App服务器
为了让Nginx知道正在build立连接的实际客户端,我使用HttpRealIpModule编译了Nginx,并进行了configuration更改。 HAPROXY也被configuration为转发XFF头。 如果客户端正在使用公共IP地址浏览,Nginx至less有一部分是正确的(我的观察)。 如果客户端拥有私有IP,并且位于另一个客户端代理(如SQUID)的后面,则获取客户端的私有IP,而不是私有IP正在被NATTED的公共IP。 根据Nginx模块文档[ http://wiki.nginx.org/HttpRealIpModule],HttpRealIpModule应该在X-Forwarded-For头部中取得最后一个IP来replace。 这里是NGREP转储为一个客户与私有IP背后的鱿鱼代理
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头是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。
在头部看到的最后一个IP是116.90.235.11,但是nginx的日志文件显示了客户端的私有IP 192.168.2.111
这是正常的?
这可能由于许多事情而发生。 Nginx是第一个代理,因此它将保留HTTP头。 因此,如果您的HAproxy(或者即使用户的LAN代理)已经提供了一个X-Forwarded-For,那么通过代理(HAproxy – > nginx – > backend)将会保留一个很好的机会。
请+1如果帮助:)谢谢