2011-04-21 69 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