最近在做一個項目, 用到企業微信,架構上使用了 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 X-Forwarded-Proto $scheme;
配置Tomcat server.xml 的 Engine 模塊下配置一個 Valve:
配置雙方的 X-Forwarded-Proto 就是為了正確地識別實際用戶發出的協議是 http 還是 https。
此時再查看request.getRequestURL()就會發現輸出的是https