如何在tomcat访问日志中记录客户端IP和X-Forwarded-For IP

新手上路,请多包涵

如何在 tomcat 访问日志中记录客户端 IP 和 X-Forwarded-For IP。

我正在使用 %{X-Forwarded-For}i,如果我通过负载均衡器访问,它会记录实际的客户端地址。但是,如果我直接访问 tomcat 实例,则不会记录实际的客户端地址。有没有办法在这两种情况下显示实际的客户端 IP 地址?

原文由 Kishore Tamire 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 999
1 个回答

来自 http://www.techstacks.com/howto/configure-access-logging-in-tomcat.html

如果您运行的 tomcat 版本高于 6.0.21 或 tomcat 7,则可以利用新的 Remote 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>

如果您使用的是早于 6.0.21 的 tomcat 6 版本并且您想要存储 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 地址。你仍然会记录一个请求——你只是不知道它来自哪里。

原文由 mikep 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏