Nginx SSL+tomcat集群,取不到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-For $proxy_add_x_forwarded_for; 

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" 
  protocolHeaderHttpsValue="https"/> 

配置雙方的 X-Forwarded-Proto 就是為了正確地識別實際用戶發出的協議是 http 還是 https。

此時再查看request.getRequestURL()就會發現輸出的是https


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM