2011-04-21 152 views
9

任何人都可以指导我使用Java apache-tomcat中的X-FORWARDED-PROTO。在java中处理X-FORWARDED-PROTO apache-tomcat

应用程序设置是这样一种方式,tomcat与Apache Web服务器交谈,后者又与Cisco LoadBalancer进行交谈,最后平衡器将页面发布到客户端(tomcat - > apache2 - >负载平衡器 - >客户端)。

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

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

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

回答

1

添加到您的虚拟主机的Apache管理连接

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

这是假定你的健康检查/状态,它不需要HTTPS

+2

大声笑。你甚至读过这个问题吗?他在tomcat中寻求帮助... – 2017-04-23 08:54:13

20

我敢肯定你拥有这一切想出现在但我会加上答案。

可以在的conf/tomcat的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”。出于安全原因,我建议设置它即使它与默认值一起工作。

查看here了解更多信息。

+1

如果您使用Apache代理向Tomcat发送的请求,则需要将其添加到您在Apache中的SSL配置中:RequestHeader set X-Forwarded-Proto“https” – 2013-07-02 18:42:45

+4

Tomcat 7字段略微不同 - http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html – 2014-05-19 13:21:30