4

我们目前正在使用 Tomcat 7 update 76 进行冗余服务器设置(2 个服务器 + 1 个负载均衡器)。为了满足我们公司的日志记录要求,我们正在尝试获取实际发送请求的远程服务器的 IP,不是负载均衡器的 IP。不幸的是,我们无法让它与以下文档一起使用:

我们使用以下配置进行访问日志记录和远程阀门:

<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="xxx\.xxx\.xxx\.7|xxx\.xxx\.xxx\.8|xxx\.xxx\.xxx\.9"  remoteIpHeader="X-Forwarded-For" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access_log." suffix=".log"
pattern="%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t &quot;%r&quot; %s %b" 
requestAttributesEnabled="true" />

设置了请求标头“X-Forwarded-For”,并通过wireshark分析了负载均衡器。但是,我们仍然只能获得负载均衡器的 IP,而不是远程客户端的 IP。已检查配置的 IP 地址并且它们是正确的。

4

1 回答 1

0

改变 AccessLogValve 的模式是我的解决方案,如下所示:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%{x-forwarded-for}i %l %u %t &quot;%r&quot; %s %b" />

来源:https ://stackoverflow.com/a/36357291/1830268

完整的模式属性选项在这里:https ://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Access_Log_Valve/Attributes

于 2021-04-09T18:27:19.720 回答