1. 程式人生 > >https請求Nginx轉發給tomcat時變成http問題解決

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

2.https://blog.csdn.net/mg4848/article/details/78481411

3.https://www.cnblogs.com/pizitai/p/6518987.html