proxy_cookie_path语法
proxy_cookie_path source target;
- source 源路径
- target 目标路径
使用原因
nginx通过proxy_pass反向代理cookie、session丢失的问题,cookie 的 path 与地址栏上的 path 不一致, 浏览器就不会接受这个 cookie, 无法传入 JSESSIONID 的 cookie, 导致登录验证失败.
1.为什么cookie会丢失?
一个没有经过代理的地址如:http://127.0.0.1/project
,它cookie的path为:/project
;
但如果做了代理的处理,如地址:http://127.0.0.1/proxy_path
,那cookie的path就变为了代理地址:/proxy_path
。
如果cookie的path与地址栏上的path不相符游览器就不会接受这个cookie,那每次请求都会重新生成cookie,cookie中存放这sessionId,自然session也就跟着失效了。
2.nginx中proxy_cookie_path 的用法
proxy_cookie_path 的作用是用来改变cookie的路径语法:proxy_cookie_path path replacement;
path
是你要替换的路径 replacement
就是要替换为的值。详情可以去nginx 官网看看传送门。
3.下面分别分三种情况处理
1.host、端口转换,cookie不会丢失:
location /project {
proxy_pass http://127.0.0.1:8080/project;
}
2.路径也变化,则需要设置cookie的路径转换:
location /proxy_path {
proxy_pass http://127.0.0.1:8080/project;
proxy_cookie_path /project /proxy_path;
}
3.直接代理本地端口:
location /proxy_path {
proxy_pass http://127.0.0.1:8080/;
proxy_cookie_path /project /proxy_path; # project 为你的项目名 也可用变量代替
}
4. 示例:
直接 访问的地址:
http://sm2-dp.com.cn:8005/GetToken/smartbi/confirm?resid=I8a04e8a4018c81d081d06924018d1b73fea062
配置的nginx:将响应给客户端的set-cookie 由 /smartbi 改成 /cms/scSmartbi/;
location /cms/scSmartbi/ {
proxy_ignore_client_abort on;
proxy_pass https://sm2-dp.com.cn:8005/;
proxy_redirect https://sm2-dp.com.cn:8005/ http://cms.tk.cn/cms/scSmartbi/;
proxy_cookie_path /smartbi /cms/scSmartbi/;
client_max_body_size 1024m;
proxy_connect_timeout 15s;
proxy_read_timeout 120s;
proxy_send_timeout 720s;
}
参考:
nginx通过proxy_pass反向代理cookie、session丢失的问题_nginx proxy_pass cookie-CSDN博客