任何人都可以指导我在Java apache-tomcat中使用X-FORWARDED-PROTO。
应用程序设置是这样一种方式,tomcat与Apache Web服务器进行交谈,然后与Cisco LoadBalancer交谈,最后平衡器将页面发布到客户端(tomcat – > apache2 – >负载平衡器 – >客户端)。
SSL证书安装在LoadBalancer及其处理https请求中。 我的要求是使应用程序的行为方式使用X-FORWARDED-PROTO,并将页面更改为HTTP或HTTPS。
检查我的网页的头文件,我找不到X-FORWARDED-PROTO参数。 我也无法访问LoadBalancerconfiguration,ITbuild议我们使用X-FORWARDED-PROTO来区分HTTP和HTTPS请求。
是否有任何configuration要在tomcat或apache级别完成,以便它将返回X-FORWARDED-PROTO参数。 还是应该在LoadBalancer中处理configuration?
我很确定你现在已经明白了,但是我会加上答案。
你可以在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转发的标头,并将默认为“http”。 出于安全原因,我建议设置它,即使它与默认值一起工作。
在这里寻找更多的信息。
将此添加到您的apache虚拟主机管理连接
<VirtualHost *:80> ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R] </VirtualHost>
这假定您的健康检查是/状态,不需要https