Nginx SSL+tomcat集群,取不到https正確協議
阿新 • • 發佈:2017-12-20
分享 安裝目錄 remote 瀏覽器 架構 解決方案 name head 文件
protocolHeaderHttpsValue="https"/>
最近在做一個項目, 用到企業微信,架構上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,項目使用https協議,但是在調試微信菜單的相關功能時卻發現報錯,報錯信息如下:
經過調試dofilter裏面的代碼,發現: 瀏覽器中輸入的URL是 https://shaidh.dhwrwi.com/dheu/syuu.do 但是打斷點調試request.getRequestURL() 輸出來的 一直是 http://shaidh.dhwrwi.com/dheu/syuu.do查閱了一些資料,找到了解決方案:
解決方法很簡單,只需要分別配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的轉發選項:
在nginx安裝目錄的 conf文件夾中找到vhost.conf,
在 proxy_set_header Host $host; 下面添加一行proxy_set_header X-Forwarded-Proto $scheme;
配置Tomcat server.xml 的 Engine 模塊下配置一個 Valve:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto"配置雙方的 X-Forwarded-Proto 就是為了正確地識別實際用戶發出的協議是 http 還是 https。
此時再查看request.getRequestURL()就會發現輸出的是https
Nginx SSL+tomcat集群,取不到https正確協議