HAProxy不转发客户端标题

我们已经安装了Apache的前端HAProxy。 该设置工作,但客户端的IP地址不转发尽pipe规则“forwardfor”。

我以前曾调查过这样的serverfault上的答案,例如haproxy和转发客户端IP地址到服务器,但目前无法解决问题。

这是configuration:

frontend apache-http bind 192.168.56.150:80 mode http option http-server-close option forwardfor header X-Real-IP reqadd X-Forwarded-Proto:\ http default_backend apache-http stats enable #stats hide-version backend apache-http # redirect scheme https if !{ ssl_fc } balance roundrobin cookie SERVERID insert indirect nocache server www-1 10.0.0.120:80 cookie S1 check server www-2 10.0.0.130:80 cookie S2 check 

PHP服务器variables返回HAProxy的信息:

 $_SERVER['REMOTE_ADDR'] returns 10.0.0.120 $_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing 

Apache日志还返回—

configuration:

 LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

我在HAProxy的configuration中丢失了什么?

问题在于HAProxy和Apache之间的configuration不匹配。

您已经告诉HAProxy将客户端的真实IP发送到名为X-Real-IP的标头中:

 option forwardfor header X-Real-IP 

在Apache中,您正在寻找名为X-Forwarded-For的标题:

 $_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing LogFormat "%{X-Forwarded-For} ... 

你有两个select来解决这个问题。

  1. 让HAProxy通过更改默认名称添加标题

     option forwardfor header X-Real-IP 

     option forwardfor 
  2. 改变Apache和你的PHP代码来寻找正确的头文件:

     $_SERVER['HTTP_X_Real_IP'] LogFormat "%{X-Real-IP} ...