任何人都可以指导我使用部署到Apache Tomcat的Java Web应用程序中的X-FORWARDED-PROTO标头。
应用程序设置是这样的,tomcat与Apache webserver进行对话,后者又与Cisco Load Balancer对话,最后平衡器将页面发布到客户端(tomcat - > apache2 - >负载均衡器 - >客户端)。
SSL证书安装在Load Balancer中,它正在处理HTTPS请求。我的要求是使应用程序的行为方式使其使用 X-FORWARDED-PROTO 并将页面更改为HTTP或HTTPS。
检查我的网页的头文件我找不到 X-FORWARDED-PROTO 标头。我也无法访问Load Balancer配置,并且IT建议我们使用 X-FORWARDED-PROTO 来区分HTTP和HTTPS请求。
是否有任何配置要在Tomcat或Apache级别完成,以便它将返回 X-FORWARDED-PROTO 标头?或者是否应该在Load Balancer中处理配置?
答案 0 :(得分: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"
/>
需要注意的是,设置 internalProxies 值非常重要。如果未设置此选项并且您使用的是非标准网络设置,则可能会导致tomcat无法检查 x-forwarded 标头的某些问题,并且默认为“http”。出于安全原因,我建议即使它使用默认值也可以设置它。
查看here了解更多信息。
答案 1 :(得分:0)
将此添加到您的apache vhost管理连接
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</VirtualHost>
这假定您的健康检查是/状态,不需要https