1. 程式人生 > >https經過nginx後struts跳轉成http

https經過nginx後struts跳轉成http

https經過nginx後struts跳轉成http

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

1
2
3
<action name="login_*" method="{1}" class="loginAction">
	<result name="nextjsp" type="redirect">/skin/main/main.jsp</result>
</action>
  • 系統只用https訪問

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

1
2
3
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8449" URIEncoding="UTF-8"  secure="true" scheme="https" proxyPort="443"  />

這樣所有訪問到tomcat的請求,如果使用struts的redirect方法,都會跳轉成https的方法。

  • 兩種方式都可以訪問

如果專案有特殊要求,需要專案既可以使用http也可以使用https訪問,可以採用如下的方法:

​ 在tomcat的server.xml配置檔案中增加一個connector標籤,內容和之前的一樣即可,唯一的區別就是一個裡面有https的三個引數,一個不帶(這裡要注意一下,2個connector的port不能一樣,要不然埠衝突,tomcat起不來)。

1
2
3
4
5
6
 <Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8449" URIEncoding="UTF-8" />
<Connector port="8881" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8449" URIEncoding="UTF-8"  secure="true" scheme="https" proxyPort="443"  />

在前端配置nginx的時候,可以選擇把來自http的請求轉發到後端 不帶https引數的connector 埠上, 把https的請求轉發到帶https引數的connector 埠上。