Kis*_*ire 3 java ip tomcat load-balancing http-headers
如何在tomcat访问日志中记录客户端IP和X-Forwarded-For IP。
我正在使用%{X-Forwarded-For} i,并且如果我通过负载均衡器进行访问,它将记录实际的客户端地址。但是,如果我直接访问tomcat实例,则不会记录实际的客户端地址。在这两种情况下,是否都可以显示实际的客户端IP地址?
从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>
Run Code Online (Sandbox Code Playgroud)
如果您使用的tomcat 6版本低于6.0.21,而您想存储X-Forwarded-For IP地址,则可以修改AccessLogValve的pattern属性。您需要删除“ common”或“ combined”模式并将其替换为以下模式之一:
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
Run Code Online (Sandbox Code Playgroud)
RemoteIP Valve确实处理的主要问题是,您只会在日志中获得X-Forwarded-For地址。如果您直接访问应用服务器,而绕过在请求中插入X-Forwarded-For标头的设备,则不会记录IP地址。您仍然会记录一个请求,只是不知道它来自何处。
归档时间: |
|
查看次数: |
12613 次 |
最近记录: |