【问题标题】:Handling X-FORWARDED-PROTO header in Java web application在 Java Web 应用程序中处理 X-FORWARDED-PROTO 标头
【发布时间】:2011-08-10 02:49:39
【问题描述】:

谁能指导我在部署到 Apache Tomcat 的 Java Web 应用程序中使用 X-FORWARDED-PROTO 标头。

应用程序设置的方式是,tomcat 与 Apache 网络服务器通信,后者又与 Cisco 负载均衡器通信,最后均衡器将页面发布到客户端(tomcat -> apache2 -> 负载均衡器 -> 客户端)。

SSL 证书安装在负载均衡器中,它正在处理 HTTPS 请求。我的要求是使应用程序的行为方式使其使用 X-FORWARDED-PROTO 并将页面更改为 HTTP 或 HTTPS。

检查我的网页的头文件我找不到 X-FORWARDED-PROTO 标题。我也无权访问负载均衡器配置,IT 建议我们使用 X-FORWARDED-PROTO 来区分 HTTP 和 HTTPS 请求。

是否需要在 Tomcat 或 Apache 级别进行任何配置以使其返回 X-FORWARDED-PROTO 标头?还是应该在负载均衡器中处理配置?

【问题讨论】:

    标签: java apache ssl http-headers ssl-certificate


    【解决方案1】:

    将此添加到管理连接的 apache vhost 中

    <VirtualHost *:80>
      ...
      RewriteEngine On
      RewriteCond %{HTTP:X-Forwarded-Proto} !https
      RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    </VirtualHost>
    

    这假设您的健康检查是 /status,它不需要 https

    【讨论】:

      【解决方案2】:

      我很确定你现在已经弄清楚了,但我还是会添加答案。

      您可以在tomcat的conf/server.xml的引擎标签中使用org.apache.catalina.valves.RemoteIpValve类。

          <Valve className="org.apache.catalina.valves.RemoteIpValve"
                 internalProxies="192.168.1.XXX"
                 remoteIpHeader="x-forwarded-for"
                 remoteIpProxiesHeader="x-forwarded-by"
                 protocolHeader="x-forwarded-proto"
          />
      

      需要注意的一点是设置 internalProxies 值。如果未设置此选项并且您使用的是非标准网络设置,则可能会导致一些问题,tomcat 不会检查 x-forwarded 标头,并且默认为“http”。出于安全原因,我建议设置它,即使它使用默认值。

      查看here 了解更多信息。

      【讨论】:

      • 如果您使用 Apache 代理对 Tomcat 的请求,您需要在 Apache 中将其添加到 SSL 配置中:RequestHeader set X-Forwarded-Proto "https"
      • 您说“出于安全原因,我建议设置它,即使它使用默认值也是如此。”你能详细说明吗?我一直在想,即使代理 IP 在默认允许范围内,是否也应该设置它。
      • 这个答案很完美。 @Allan 感谢您强调 internalProxies 的重要性,这正是我所缺少的。
      • 请注意,您实际上只需要设置protocolHeader="X-Forwarded-Proto" (可能internalProxies 取决于您的设置)。其余的带有默认值,在大多数情况下应该没问题。具体来说,IP 已经重写(因此不需要 remoteIpHeaderremoteIpProxiesHeader)。
      猜你喜欢
      • 2021-12-06
      • 2015-12-31
      • 2014-06-14
      • 2023-03-18
      • 2020-01-27
      • 2013-10-03
      • 2019-03-09
      相关资源
      最近更新 更多