HAProxy 不转发客户端标头

HAProxy 不转发客户端标头

我们在 Apache 前面安装了 HAProxy。设置成功,但尽管有“forwardfor”规则,客户端的 IP 地址仍未转发。

我之前曾调查过类似这样的serverfault答案,例如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 的配置中的某些内容?

答案1

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

您已告诉 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} ...

您有两种方法可以解决此问题。

  1. 让 HAProxy 添加具有默认名称的标头,方法是更改

    option forwardfor header X-Real-IP
    

    option forwardfor  
    
  2. 更改 Apache 和 PHP 代码以查找正确的标头:

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

相关内容