Linode NodeBalancers用于捕获客户端IP的Tomcat配置(x-forwarded-for)

时间:2014-03-18 04:43:28

标签: tomcat load-balancing linode clientip

我正在使用Linode NodeBalancers来加载我的2个tomcat服务器的平衡器(用于提供https请求),我们的业务要求之一是能够捕获ClientIP以进行指纹识别+其他目的。

但是,我似乎无法让NodeBalancers通过x-forwarded-for传递客户端IP,Linode支持也不知道如何在Tomcat配置上这样做?

我的Tomcat配置(server.xml)的部分内容

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           keystoreFile="myKeyStore" 
           keystorePass="myKeyStorePassword"
           compression="on"
           compressableMimeType="text/html,text/xml,text/css,text/javascript"
           compressionMinSize="1024"
             maxPostSize="5097152"
           clientAuth="false" sslProtocol="TLS" />
  <Valve className="org.apache.catalina.valves.RemoteIpValve"
       remoteIpHeader="x-forwarded-for"
       protocolHeader="x-forwarded-proto"
       protocolHeaderHttpsValue="https"
  />

1 个答案:

答案 0 :(得分:1)

看起来你的标题配置很好,但需要注意三件事:

  • trustedProxies属性需要信任负载均衡器。默认情况下,这包括除172.16 / 12范围内的所有专用地址
  • 如果您正在使用Tomcat访问日志阀,请确保在阀门上使用requestAttributesEnabled。日志记录是异步的,RemoteIpValve将在控制返回时重置原始值,但请求属性不会更改
  • 如果您正在卸载HTTPS,请注意在阀门可以执行其操作之前,从连接器中的foo重定向到foo /。你可能会发现你需要在连接器上设置scheme和proxyPort,否则你可以在302s中获得不稳定的位置

阀门文件相当不错,但最近这三件事让我感到惊讶(文档http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html)。