Tomcat: 'X-Forwarded-For' 不适用于负载平衡器

标签 tomcat proxy tomcat7 load-balancing x-forwarded-for

我们目前正在使用 Tomcat 7 update 76 进行冗余服务器设置(2 个服务器 + 1 个负载平衡器)。为了满足我们公司的日志记录要求,我们正在尝试获取实际发送请求的远程服务器的 IP,不是负载均衡器的 IP。不幸的是,我们无法使其与以下文档一起使用:

  • https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html
  • https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
  • https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Remote_IP_Valve

  • 我们使用以下配置进行访问日志记录和远程阀:
    <Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="xxx\.xxx\.xxx\.7|xxx\.xxx\.xxx\.8|xxx\.xxx\.xxx\.9"  remoteIpHeader="X-Forwarded-For" />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="access_log." suffix=".log"
    pattern="%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t &quot;%r&quot; %s %b" 
    requestAttributesEnabled="true" />
    

    设置了请求 header “X-Forwarded-For”,并通过wireshark 分析了负载均衡器。但是,我们仍然只能获得负载均衡器的 IP,而不是远程客户端的 IP。配置的IP地址已经被检查并且它们是正确的。

    最佳答案

    更改 AccessLogValve 的模式是我的解决方案,如下所示:

    <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" />
    
    来源:https://stackoverflow.com/a/36357291/1830268
    完整的模式属性选项在这里:https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Access_Log_Valve/Attributes

    关于Tomcat: 'X-Forwarded-For' 不适用于负载平衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60827540/

    相关文章:

    java - Apache Tomcat - 来回流

    apache - 在 apache 中设置基本的 Web 代理

    linux - 如何在 Debian 上创建 HTTPS 代理服务器

    java - 从持久存储加载 session 异常,扩展

    spring - Tomcat 与 Jetty JNDI 查找

    tomcat - 通过 HTTP 的 WSO2 身份(禁用 HTTPS)

    java - Server Tomcat v8.5 Server at localhost 无法启动 Spring Project

    svn - 让 SVN 使用我的代理服务器

    javascript - Google Analytics 用于在 tomcat 上运行的网站

    tomcat - Gzip 仅在使用 isapi_redirect.dll 与 Tomcat 7 集成的 IIS 7 中不适用于 javascript 文件