X-Forwarded-For 未显示在 tomcat7 访问日志中

X-Forwarded-For 未显示在 tomcat7 访问日志中

我正在尝试在 ELB 后面运行的 tomcat 上打印出远程客户端 IP,但由于某种原因,它没有被打印到访问日志中。我的 elb 配置是:80 -> 8080 443 -> 8080 运行 tomcat7 和我在 server.xml 上的主机配置是:

<Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">

    <!-- SingleSignOn valve, share authentication between web applications
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- Remote IP Valve -->
 <Valve className="org.apache.catalina.valves.RemoteIpValve" />

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot;" />

  </Host>

我也尝试过“组合”模式。

访问日志行的示例:

- - - [18/Feb/2013:19:12:33 +0000] "GET URL HTTP/1.1" 200 1704 "remote URL" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"

非常感谢大家的帮助。谢谢

答案1

我发现这是最准确的“通用”日志格式,支持以下内容RemoteIpValve

"%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot;"

答案2

请尝试以下操作:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="combined"
           resolveHosts="false"/>

看起来默认设置是忽略私有地址,就我而言,我使用面向外部的 ELB 获取 IP,但内部 ELBS(两侧都有 10.xxx 地址)只显示 - 对于使用相同配置的地址。

相关内容