我们在 Apache 前面安装了 HAProxy。设置有效,但客户端的 IP 地址未转发,尽管有“forwardfor”规则。
我以前曾调查过类似这样的服务器故障的答案,例如haproxy 并将客户端 IP 地址转发到服务器,但到目前为止无法解决问题。
这是配置:
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 服务器变量返回 HAProxy 的信息:
$_SERVER['REMOTE_ADDR'] returns 10.0.0.120
$_SERVER['HTTP_X_FORWARDED_FOR'] returns nothing
Apache 日志也返回 ---
配置:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
我在 HAProxy 的配置中遗漏了什么吗?
问题在于 HAProxy 和 Apache 之间的配置不匹配。
您已经告诉 HAProxy 在名为的标头中发送客户端的真实 IP
X-Real-IP
:在 Apache 中,您正在寻找一个名为
X-Forwarded-For
:您有两种选择来解决此问题。
让 HAProxy 添加一个默认名称的标头,通过更改
至
更改 Apache 和您的 PHP 代码以查找正确的标头: