在java apache-tomcat中处理X-FORWARDED-PROTO

Man*_*noj 14 java apache ssl ssl-certificate http-headers

任何人都可以指导我在Java apache-tomcat中使用X-FORWARDED-PROTO.

应用程序设置是这样的,tomcat与apache webserver进行对话,后者又与Cisco LoadBalancer进行对话,最后平衡器将页面发布到客户端(tomcat - > apache2 - > load balancer - > client).

SSL证书安装在LoadBalancer及其处理https请求中.我的要求是使应用程序的行为方式使其使用X-FORWARDED-PROTO并将页面更改为HTTP或HTTPS.

检查我的网页的头文件我找不到X-FORWARDED-PROTO参数.我也无法访问LoadBalancer配置,IT建议我们使用X-FORWARDED-PROTO来区分HTTP和HTTPS请求.

是否有任何配置要在tomcat或apache级别完成,以便它将返回X-FORWARDED-PROTO参数.或者是应该在LoadBalancer中处理配置.

小智 25

我很确定你现在已经弄明白了但是我会补充答案.

您可以在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"
    />
Run Code Online (Sandbox Code Playgroud)

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

这里了解更多信息.

  • Tomcat 7字段略有不同 - http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html (4认同)

her*_*cia 0

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

\n\n
<VirtualHost *:80>\n  ...\n  RewriteEngine On\n  RewriteCond %{HTTP:X-Forwarded-Proto} !https\n  RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]\n</VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这假设您的健康检查是 /status,这不需要 https\xe2\x80\x99t

\n