我已经设置了一对新的haproxy(v1.5)负载平衡器,并在其后面放置了2个webserver(apache on Centos 6)。 我已经设置了X转发,我可以在web服务器的access_log中看到客户端的真实IP。
但是,我并没有在error_log中看到客户端的真实IP,它只logginghaproxy节点IP。 我究竟做错了什么? 附件是Web服务器的日志configuration。
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>
由于您没有向我们展示过,我想你正在使用默认的ErrorLogFormat ,它不包含你想要的信息。 您将不得不使用ErrorLogFormat指令来configurationlogging。
从Apache 2.4起, ErrorLogFormat指令是可用的,它允许您调整在ErrorLog中logging的内容。
大多数反向代理添加一个标题,其中包含客户端的原始IP地址,您可以在其中login反向代理的IP地址,也可以不使用反向代理的IP地址。
(反向)代理设置的一个相当常见的头是X-Forwarded-For: <client-ip> ,您将使用%{VARNAME}i捕获%{VARNAME}i :
%{X-Forwarded-For}i
举个例子
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client: %{X-Forwarded-For}i forwarded by: %a] %M"