Nginx+Tomcat 部署 request.getScheme获取不到Https问题
通过浏览器输入https://www.xxx.com,request.getScheme()获取到的确实http而不是https.
通过request.getRequestURL()拿到的也是http://www.xxx.com
分析原因,是因为用nginx+tomcat部署web服务,tomcat接受到的请求都是来自于nginx的http请求。
1 | request.getScheme() //总是 http,而不是实际的http或https |
解决办法:
1、在nginx 配置location处加上proxy_set_header X-Forwarded-Scheme $scheme;
通过request.getHeader(“X-Forwarded-Scheme”)获取真实的scheme
2、在Tomcat server.xml中添加1
2
3
4
5
6<Engine name="Catalina" defaultHost="localhost">
这行之后
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
protocolHeader="X-Forwarded-Proto"
protocolHeaderHttpsValue="https"/>