0

我正在尝试在 tomcat 日志中记录网站访问者应用程序我尝试在 server.xml 中添加以下代码行

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

我在 tomcat 日志中得到以下输出。

  • 192.168.1.149 15 - - [24/Jul/2020:16:24:16 +0200] “GET /geonetwork/srv/eng/shib.user.login.noforward HTTP/1.0”200 50

我需要获取正在访问该应用程序的人的远程 IP

4

1 回答 1

0

有 2 种情况,您的 tomcat不在任何负载均衡器或代理之后,也不在一个. 如果您的 tomcat 不在代理或负载均衡器后面,则它已经正确。为了采取更多预防措施,可以添加%a以便它可以获取远程 IP 地址,如Access_Log_Valve中所述

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

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%{X-Forwarded-For}i %a %h %F %l %u %t &quot;%r&quot; %s %b" />

如果要%h用于远程主机名,请在连接器处设置 enableLookups="true"

<!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
<Connector port="8080" 
....
    enableLookups="true"
      ....
/>

但无论如何,tomcat 位于代理或负载均衡器之后,请添加更多配置,如下所示:

<Valve className="org.apache.catalina.valves.RemoteIpValve" />

<Valve className="org.apache.catalina.valves.AccessLogValve" ....

RemoteIpValve 使用的代理默认 IP 地址:

  • 127.0.0.0/8
  • 169.254.0.0/16
  • 10.0.0.0/8
  • 192.168.0.0/16

也许如果您的代理未在此处列出,请添加 internalproxies 配置以捕获代理:

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
  internalProxies="172.16.0.10|172.16.0.11" />
于 2020-07-24T14:01:19.367 回答