将 X-Forwarder-For HTTP 标头添加到 HAProxy

将 X-Forwarder-For HTTP 标头添加到 HAProxy

我使用HAProxy 1.3.26代理CentOS 5.8将所有请求发送到专用服务器。我使用 HAProxy 仅将 HTTP 和 HTTPS 代理到单个服务器,因此没有负载平衡。

我的haproxy.cfg很简单:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log global
        option dontlognull
        option httpclose
        option forwardfor
        clitimeout 60000
        srvtimeout 60000
        contimeout 5000
        retries 3
        option redispatch

listen http 192.168.0.1:80
        mode tcp
        option tcplog
        maxconn 10000
        server web01 192.0.1.13:80 maxconn 5000

listen https 192.168.0.1:443
        mode tcp
        maxconn 10000
        server web01 192.0.1.13:443 maxconn 5000

在哪里:

192.168.0.1 - server where HAProxy is installed
192.0.1.13  - server to which HTTP requests are forwarded

我想在我的Apache 2.2.3访问日志中看到客户端的 IP 地址。此选项通常通过添加标HTTP X-Forwarded-For头然后在 Web 服务器日志中读取它来实现。因此,我在 httpd.conf 中添加了以下几行:

LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_forwarded
SetEnvIfNoCase X-Forwarded-For "." from_proxy=1
CustomLog logs/access_log combined env=!from_proxy
CustomLog logs/access_log combined_forwarded env=from_proxy

问题是,唯一记录的 IP 地址是192.168.0.1(HAProxy 服务器)。我尝试了不同的配置,阅读了文档,搜索了 Google,但仍然不明白为什么客户端的 IP 没有被记录。

我感觉我遗漏了一些简单的东西,因为配置非常简单。如果可能的话,请帮助更正配置。

感谢您的任何帮助。

答案1

请不要忘记,这不适用于 https 代理,因为 haproxy 无法破坏加密会话的内容。您可能还想检查 Apache 的 mod_rpaf 模块,它使这一切变得更容易。

相关内容