1. 程式人生 > >Nginx SSL+tomcat集群,取不到https正確協議

Nginx SSL+tomcat集群,取不到https正確協議

分享 安裝目錄 remote 瀏覽器 架構 解決方案 name head 文件

最近在做一個項目, 用到企業微信,架構上使用了 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"
  protocolHeaderHttpsValue="https"/>

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

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

Nginx SSL+tomcat集群,取不到https正確協議