背景介绍
我有一台服务器,其中有 3 个 IP 地址和 3 个<Host>
元素定义在 中server.xml
。我使用基于 IP 的虚拟主机。
我已经启用了访问日志阀在每个主机上,记录到 3 个不同的日志文件。
它运行正常,而且我可以看到根据我访问的 IP,请求被记录到正确的文件中。
到目前为止,一切都很好。
现在我正在尝试诊断负载均衡器问题,因此我需要查看每个传入请求所到达的 IP。
我的实际问题
根据文档如果您将其包含%A
在访问日志模式中,它应该记录“本地 IP 地址”。
例如。pattern="%h %A %l %u %t "%r" %s %b"
但是,我看到的是,到达 3 个虚拟主机中的任何一个的请求都显示相同的本地 IP(即,所有 3 个日志文件都显示所有请求的相同本地 IP)
我希望在每个日志中看到不同的本地 IP。我确信它们到达了不同的 IP,因为这就是基于 IP 的虚拟主机的工作方式。
我想知道是否%A
只是输出 Tomcat想它的 IP 地址,而不是请求实际到达的 IP。
是否可以记录每个请求的实际 IP?我应该使用其他属性吗?
附加信息
服务器有 3 个 IP,hosts 文件包含:
10.10.10.10 localhost
10.10.10.1 serverA
10.10.10.2 serverB
我的server.xml
包含:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" server="Unknown"
useIPVHosts="true" />
...
<engine>
<Host name="localhost" appBase="C:\webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %A %l %u %t "%r" %s %b"/>
</Host>
<Host name="serverA" appBase="D:\webapps\app01">
<Context path="/myapp" docBase="D:\webapps\app01" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="serverA_access_log." suffix=".txt" pattern="%h %A %l %u %t "%r" %s %b"/>
</Host>
<Host name="serverB" appBase="D:\webapps\app02">
<Context path="/myapp" docBase="D:\webapps\app02" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="serverB_access_log." suffix=".txt" pattern="%h %A %l %u %t "%r" %s %b"/>
</Host>
</engine>