从 haproxy 在 Apache 中记录客户端真实 IP

从 haproxy 在 Apache 中记录客户端真实 IP

我设置了一对新的 haproxy (v1.5) 负载均衡器,并在其后面放置了 2 个 Web 服务器(Centos 6 上的 apache)。我设置了 X-forwarded-for,我可以在 Web 服务器上的 access_log 中看到客户端的真实 IP。

但是,我在 error_log 中看不到客户端的真实 IP,它只记录了 haproxy 节点的 IP。我做错了什么?附件是 Web 服务器的日志配置。

    LogLevel warn

    <IfModule log_config_module>

    LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common        

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O         
     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

    </IfModule>

    SetEnvIf Request_URI "^/check\.txt$" dontlog
    CustomLog "logs/access_log" combined env=!dontlog
</IfModule>

答案1

由于您没有向我们展示,我猜您使用的是默认错误日志格式其中不包含您想要的信息。您必须使用 ErrorLogFormat 指令来配置要记录的内容。

答案2

从 Apache 2.4 开始ErrorLogFormat指令可用,它允许您调整 ErrorLog 中记录的内容。

大多数反向代理都会添加一个带有客户端原始 IP 地址的标头,您可以在反向代理的 IP 地址之外或替代该 IP 地址进行记录。

X-Forwarded-For: <client-ip>您可以使用以下方式捕获(反向) 代理设置的相当常见的标头%{VARNAME}i

%{X-Forwarded-For}i

例如

ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client: %{X-Forwarded-For}i forwarded by: %a] %M"  

相关内容