用nginx 代理https后,应用redirect https变成http,导致网站无法访问
浏览器到nginx是https,nginx到应用服务器变成http,
应用服务器,再做302 redirect的时候,返回的redirect 地址就变成http的地址;
原因:
原因是spring mvc的servlet的secheme取值,request.getScheme()
是取请求里的一个scheme值,所有这个值在nginx代理时要设置成https
其中: request.getScheme() return http but not https.
解决:
配置:proxy_redirect http:// $scheme://;
server { listen 80 default_server; location / { proxy_pass http://127.0.0.1:8080; proxy_redirect http:// $scheme://; #该指令会将后端响应header location内容中的http://替换成用户端协议https://。 } }
其他参考
可能是因为springmvc底层使用的是 httpservletresponse.sendredirect,并没有使用response.isSecure进,所以最后发送的请求重定向的协议是http://