浏览器访问http://www.a.com
nginx将请求转发到http://192.168.1.100
100上的应用检测用户未登录后,重定向到登录页。
但在100上的应用只需要处理http80的请求,根本不知道https的存在。
在代码中的转发实现一般是redirect:/login 最终为浏览器合成的url是http://www.a.com/login(不是https)
这时浏览器会直接访问了http://www.a.com/login。而我们希望的是访问http://www.a.com/login
所以需要开启nginx的proxy_redirect
server { #proxy_redirect off; #这样不行,需要的就是这个proxy_redirect功能 #proxy_redirect http:// http://; #这样不行,会把所有的http全部转成https #proxy_redirect http://www.a.com/ http://www.a.com/; #这样可以,但是有多个域名就不方便了 proxy_redirect http://$host/ /; #proxy_set_header Host $host:$server_port; #这样不行,不能把443带过去 重定向时会造成http://www.a.com:443 同时影响强转的正则 proxy_set_header Host $host; if ($scheme = http ) { #rewrite ^(.*)$ http://$host$1 permanent; #这样不行,post会转成get return 307 http://$host$request_uri; } }