https經過nginx後struts跳轉成http

因爲ios審覈政策的問題,決定上線https,上線後遇到了這個問題。

用戶登錄後會跳轉到登錄後頁面,由於經過了nginx,後端tomcat實際上被訪問的是http協議,所以出現了 用 https://xxxx.com/login.do 的請求,登錄後跳轉到 http://xxx.com/aftlog.do 這樣的情況。代碼使用的是struts2 的 redirect方法。


解決方法如下:

      在tomcat的server.xml 的 connector 標籤頁裏,增加 secure="true" scheme="https" proxyPort="443" 三個選項,直接重啓tomcat即可。 


這樣所有訪問到tomcat的請求,如果使用struts的redirect方法,都會跳轉成https的方法。如果有和我一樣,因爲歷史版本使用了http,新版本使用了https,因爲證書的原因,http和https的域名發生了變化,那就要求http和https都要可以用,往下看:


解決方法如下:

      在tomcat的server.xml配置文件中增加一個connector標籤,內容和之前的一樣即可,唯一的區別就是一個裏面有https的三個參數,一個不帶(這裏要注意一下,2個connector的port不能一樣,要不然端口衝突,tomcat起不來)。 這樣,在前端配置nginx的時候,可以選擇把來自http的請求轉發到後端 不帶https參數的connector 端口上, 把https的請求轉發到帶https參數的connector 端口上。


最後,建議在app版本更新多個之後取消http的connector,因爲暫時還沒有測試過增加一個connector對系統資源消耗有多大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章