关于重定向session丢失避坑
起因:老数据进行重构迁移升级框架,嵌入企微内部,运用重定向页面,filter拦截请求进行权限控制,本地部署使用一切正常,但是一放置在k8s中会导致session丢失,而产生多次调用,而企微code5分钟内只能获取一次客户信息,问题产生。
1.排查问题
误区一 认为企微多次回调导致,多次请求实际为页面样式的请求。
误区二 认为多台kong网关导致,但一次请求一定是一台网关发起的,且负载会有一定策略
正确思路 一步步排查 首先打日志,看本地是否正常,尽量复现场景,通过ip及域名及原路径,代理路径分别尝试访问,发现代理路径有问题,后继续分析,原来path路径有差异会导致session丢失。
比如说一个没有经过代理的地址 : http://127.0.0.1/project cookie_path:/project
如果按照第二种方式代理 那么地址就是 : http://127.0.0.1/proxy_path cookie_path: /proxy_path
如果cookie_path与地址栏上的path不相符游览器就不会接受这个cookie,自然session就失效了
如果按照第二种方式代理 那么地址就是 : http://127.0.0.1/proxy_path cookie_path: /proxy_path
如果cookie_path与地址栏上的path不相符游览器就不会接受这个cookie,自然session就失效了
2.解决办法:
nginx提供 path特殊配置
proxy_cookie_path 的作用是用来改变cookie的路径
语法: proxy_cookie_path path
replacement
; path
就是你要替换的路径 replacement
就是要替换的值
原文
http://nginx.org/en/docs/http/ngx_http_proxy_module.html?&_ga=1.161910972.1696054694.1422417685#proxy_cookie_path
proxy_cookie_path /project /proxy_path;
location /proxy_path { proxy_pass http://127.0.0.1:8080/; proxy_cookie_path /project /proxy_path; # project 为你的项目名 也可用变量代替 }
便可解决,但是一般来说运维组对于修改并不是很懂,这种情况只需要将项目特殊路径去掉,直接/便可解决问题。
参考:https://www.jianshu.com/p/34abe7eb6f0b
talk is cheap. show me the code.