我试图在ELB后面运行的tomcat上打印远程客户端IP,出于某种原因,它不会被打印到访问日志中。 我的elbconfiguration是:80 – > 8080 443 – > 8080在server.xml上运行tomcat7和我的主机configuration是:
<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 "%r" %s %b "%{Referer}i" "%{User-Agent}i"" /> </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"
希望在这里一些帮助家伙。 谢谢
我发现这是与支持RemoteIpValve
的“常见”日志格式相当的最准确的:
"%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i""
尝试以下操作:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="combined" resolveHosts="false"/>
它看起来像默认是忽略私人地址,在我的情况下,我得到的IP与我面向外部的ELB,但内部ELBS(其中有两个10.xxx地址)只显示 – 地址使用相同的configuration。