【问题标题】:Linode NodeBalancers Tomcat Configuration to capture client IP (x-forwarded-for)Linode NodeBalancers Tomcat 配置以捕获客户端 IP (x-forwarded-for)
【发布时间】:2014-04-23 14:44:49
【问题描述】:

我正在使用 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"
  />

【问题讨论】:

  • 你能粘贴 NodeBalancer 传递给 Tomcat 的 HTTP 头吗?您可以使用“sudo tcpdump -vvvs 0 -l -A -i ”来获取标题。

标签: tomcat load-balancing linode clientip


【解决方案1】:

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

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

阀门文档非常好,但最近所有这三个都让我感到惊讶(此处为文档http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html)。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 2018-06-14
    • 2021-06-08
    • 2021-05-25
    • 2016-02-17
    • 2020-01-08
    • 2016-01-25
    • 2014-10-27
    • 2016-02-22
    相关资源
    最近更新 更多