我端口用的2222
location / {
proxy_cookie_flags ~ nosecure nosamesite; 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-Real-Port $remote_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass https://order.xxx.net; proxy_redirect https://order.xxx.net/ http://$host:2222/; }
(1)proxy_pass https://order.xxx.net; 这句负责转发
(2)proxy_redirect https://order.xxx.net/ http://$host:2222/; 这句负责替换302跳转的地址,这样浏览器地址始终是192.168.1.100:2222,不会变成目标网址
(3)由于是http转发为https网页,有个问题,就是cookie 响应中cookie是带Secure=true的, 格式如下: SESSION=MjIyZjk4ZTYtZTFkNS00ZjBlLTlkMWQtZDI3NGVlMDU1YmYz; Path=/; secure=true; SameSite=None;; HttpOnly
由于是http://192.168.1.100:2222访问的,如果设置secure=true,浏览器会拒绝写入cookie。 但注意,如果用http://localhost:2222访问,是没问题的。
在本地开发环境下,浏览器对 localhost 的处理是一个例外情况。根据浏览器的安全策略,当你在 localhost 上使用 HTTP 访问时,它被视为一个安全连接,即使实际上不是通过 HTTPS 进行的。这样做是为了方便开发和调试过程。
解决办法: nginx中替换掉set-cookie中的secure
proxy_cookie_flags ~ nosecure;
发现还是不行,查看浏览器提示,有SameSite,没有secure,写入cookie还是被拒绝了。
所以最后是这样:
proxy_cookie_flags ~ nosecure nosamesite; 替换后OK了。
|