https請求Nginx轉發給tomcat時變成http問題解決
1 Nginx對應server的location新增配置
將referer的請求scheme資訊,用來作為當前請求的scheme,如此可以保證所有的請求都是同一個scheme,不會因為redirect而遺漏資訊。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
如上配置,經過nginx反向代理後的HttpServletRequest中header部分就帶上了欄位X-Forwarded-Proto。
2 Tomcat的配置srever.xml
2.1 connector裡新增
redirectPort="443" proxyPrort="443"
2.2 Host裡新增
讓tomcat在解析請求和做重定向的時候,知道用什麼協議。主要的配置在server.xml裡面的Engine下,定義一個Value元素。
<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeaderHttpsValue="https" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" />
這個配置裡面,重點是protocolHeader欄位,意思就是說,當protocolHeader欄位的值為protocolHeaderHttpsValue的https的時候,認為是安全連線,否則就是http的非安全連線。
3 在防火牆裡新增443埠的入站規則
/sbin/iptables -I INPUT -p tcp --dport 443 -j ACCEPT #開啟443埠
/etc/rc.d/init.d/iptables save #儲存配置
/etc/rc.d/init.d/iptables restart #重啟服務
檢視已開放埠
/etc/init.d/iptables status
結果如下
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
你可以使用 lsof 命令來檢視某一埠是否開放。檢視埠可以這樣來使用,我就以80埠為例:
lsof -i:80
如果有顯示說明已經開放了,如果沒有顯示說明沒有開放
本文參考自:
1.https://blog.csdn.net/cn12306com/article/details/80827420