【问题标题】:Need to get remote ip of one who is accessing the web application需要获取正在访问 Web 应用程序的远程 ip
【发布时间】:2020-11-14 07:50:57
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 请分享您的 server.xml
  • &lt;Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"&gt; &lt;Context docBase="C:\MeDaResurser\bilder" path="/MeDa/bilder"/&gt; &lt;Context docBase="C:\MeDaResurser\htmlView" path="/MeDa/htmlView"/&gt; &lt;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 &amp;quot;%r&amp;quot; %s %b" /&gt; &lt;/Host&gt;
  • 是的。我试过这个链接“stackoverflow.com/questions/48103673/…”@FahimBagar
  • 你的tomcat版本是多少?

标签: tomcat8 x-forwarded-for


【解决方案1】:

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

<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" />

【讨论】:

  • 这两种方法我都试过了,我没有得到访问Web应用程序的远程IP
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2012-02-13
  • 2019-10-12
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多