nginx 反向代理(proxy_pass)cookie,session丢失问题
nginx 反向代理(proxy_pass)cookie,session丢失问题
1、丢失原因
请求的接口地址经过反向代理后,所携带的 cookie 并没有一同携带到反向代理的地址。因此就导致了 session 失效。
2、语法
语法: proxy_cookie_path path
replacement
; path
就是你要替换的路径 replacement
就是要替换的值
3、可能出现场景
假设域名为(主域名情况):ibuzheng.com
- 只进行host、端口转换,cookie 不会改变
## 场景一:代理的地址与项目同名(假设项目名为:itest,端口号为8081)
location /itest { ##注意此处,跟项目同名
proxy_pass http://127.0.0.1:8080/itest;
}
## 以上这种情况,因为反向地址依旧与项目同名,只是做了项目端口号转向,因此 cookie 不会丢失
- 路径改变,需要重新配置 cookie 执行路径
## 场景二:代理的地址与项目不同
location /proxy_path { ##注意此处,跟项目不同名(proxy_path 代理地址)
proxy_pass http://localhost:8080/projectName;
proxy_cookie_path /projectName /proxy_path;
}
上述,proxy_cookie_path
的意思为:将原本发送给项目 /projectName
的重新指向发送给 proxy_path
假设域名为(子域名情况):ibuzheng.com/policy
## 场景:代理的地址与项目不同
location /businessSrver { ##注意此处,跟项目不同名(proxy_path 代理地址)
proxy_pass http://localhost:8080/projectName;
proxy_cookie_path /projectName /policy/businessSrver;
## proxy_cookie_path /projectName /businessSrver; ## 错误示范,这个无法获取到 cookie 下面图片地址
}
上述,proxy_cookie_path
的意思为:将原本发送给项目 /projectName
的重新指向发送给 /policy/businessSrver
;
ps:如果出现cookie还未携带发送的情况,可以打开F12,查看一下
cookies
发送失败具体发送到哪里,是否与代理接口地址一致。
图:1、为传送失败,2、为传送成功