后端服务器记录真实ip
问题
使用HAProxy调度web服务器时,由于web服务器认为调度器是客户端,所以只会记录调度器的ip地址而不是真实客户端的ip
解决
HAProxy有一个配置选项”option forwardfor”,可以为http报头添加客户端ip,使web服务器知道真实客户端ip
语法:option forwardfor [ except < network> ] [ header < name> ] [ if-none ]
< network>
可选参数,凡是源地址匹配至此网络中的请求都禁用此功能< name>
可选参数,使用自定义的首部代替默认的”X-Forwarded-For”.若默认的”X-Forwarded-For”首部已被占用,则可自定义其它的首部if-none
仅在此首部不存在时才将其添加至http报头中
需要注意的是,HAProxy工作于隧道模式,其仅检查每一个连接的第一个请求.因此,仅第一个请求报文被附加此首部.如果想为每一个请求都附加此首部,请确保同时使用了”option httpclose”,”option forceclose”和”option http-server-close”几个option
实验
修改haproxy配置文件
]# vim /etc/haproxy/haproxy.cfg //事实上HAProxy默认已经提供了option forwardfor的配置 defaults option forwardfor except 127.0.0.0/8
修改web服务器的配置文件
]# vim /etc/httpd/conf/httpd