client(web 浏览器) ----> haproxy(acl backend)----> nginx (proxy_pass)----> java程序
地址如下:
1.1.1.1 2.2.2.2 3.3.3.3

默认正常的java程序看到的 X-Forwarded-For 为 1.1.1.1,2.2.2.2, 3.3.3.3

haproxy日志中看到的是 1.1.1.1
nginx日志中看到的是 1.1.1.1,2.2.2.2

如有一段nginx中的正常的生产日志:
"111.14.66.215, 21.32.2.206,21.32.2.206"

但是haproxy和nginx中都有一些参数可以改变这个现状

如: haproxy如果设置
#option forwardfor except 127.0.0.0/8

如果option forwardfor被注释掉了,haproxy将不会将自己的作为代理写入到x-forwarder-for中去。

如: nginx中如果设置
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果 nginx中proxy_set_header被注释,nginx将不会将自己作为代理写入到x-forwarder-for中去。

注意:如果nginx设置了proxy_set_header ,real_ip_header {proxy_protocol|X-Forwarded-For}; 的每个不同值都会影响proxy_set_header的结果。