如何在 tomcat 访问日志中记录 Client IP 和 X-Forwarded-For IP。
我正在使用 %{X-Forwarded-For}i,如果我通过负载均衡器访问,它会记录实际的客户端地址。但如果我直接访问 tomcat 实例,则不会记录实际的客户端地址。有没有办法在这两种情况下显示实际的客户端 IP 地址?
From http://www.techstacks.com/howto/configure-access-logging-in-tomcat.html http://www.techstacks.com/howto/configure-access-logging-in-tomcat.html:
如果您运行的 tomcat 版本高于 6.0.21 或 tomcat 7,则可以利用新的远程 IP Valve。对于访问日志记录,此阀的优点在于,如果在 X-Forwarded-For 标头中传递了 IP 地址,它将自动将客户端 IP 与通过 X-Forwarded-For 标头传递的 IP 地址进行交换。加载它非常容易。只需在 AccessLogValve 声明之前将 org.apache.catalina.valves.RemoteIpValve 添加到 server.xml 中即可。例如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<!-- Remote IP Valve -->
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="combined" resolveHosts="false"/>
-->
</Host>
如果您使用的 tomcat 6 版本早于 6.0.21,并且您想要存储 X-Forwarded-For IP 地址,那么您可以修改 AccessLogValve 的模式属性。您需要删除“通用”或“组合”模式并将其替换为以下模式之一:
Common Log Format: %{X-Forwarded-For}i %l %u %t "%r" %s %b
Combined Log Format: %{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i %{Referer}i
RemoteIP Valve 确实解决的主要问题是您只能在日志中获得 X-Forwarded-For 地址。如果您直接访问应用服务器,绕过在请求中插入 X-Forwarded-For 标头的设备,您将不会记录 IP 地址。您仍然会记录一个请求——您只是不知道它来自哪里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)