我使用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 模块,它使这一切变得更容易。