https请求Nginx转发给tomcat时变成http问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24138151/article/details/82705833

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

猜你喜欢

转载自blog.csdn.net/qq_24138151/article/details/82705833