瀏覽器輸入https://www.mysite.com,後臺經過request.getScheme()獲取到的確實http而不是https,經過request.getRequestURL()拿到的也是http://www.mysite.comnginx
分析緣由:由於nginx+tomcat部署web服務,tomcat接受到的請求都是來自於nginx的http請求。瀏覽器請求https是外網域名或者ip,在瀏覽器發出請求時通過nginx代理攔截會進行證書驗證,驗證經過後nginx把外網請求轉發到內網服務器,通常都是http請求,由於https證書只針對外網ip,內網服務沒法配置ssl證書,並且若是轉發到web服務器也是https請求,那麼每一個web服務都須要配置ssl證書。web
方案一:修改服務端,支持https請求,nginx的配置改成proxy_pass https://xrk_biz_web2_8013;spring
方案二:在nginx端強制重定向http到https。瀏覽器
方案三:修改服務端邏輯代碼(配置文件中主機訪問地址及redirect補全主機地址),保證相關回調連接都是https開頭。tomcat
方案四:使用spring-boot官方提供的解決方案,nginx添加配置(最終採用):服務器
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;spring-boot