业务场景一(前端设置cookie后,后端获取不到)
- 业务介绍:两个单机系统A、B,A系统为主系统,B系统为子系统,启动A系统点击链接跳转至B系统,A、B系统均独立部署,统一由Nginx进行反向代理(由于以前不使用Nginx,Nginx是后续接入的所以在原有实现上出现了问题)
- 问题描述:因为B系统虽然单独部署,但是其实是属于A系统的子系统,所以跳转后,需要实现登录状态同A系统保持一致,所以通过拦截器和A系统分发token的形式,自己实现了伪单点的功能,将A系统分发的token由前端存储到cookie中,然后B系统获取token,在请求各个接口前同A系统进行校验(其实A 系统就相当于SSO服务器)。当接入Nginx后,出现了一个问题,后端获取不到前端设置的cookie。
- 问题分析:Nginx 部署后,可以正常进行A、B系统的方向代理,并且通过;浏览器F12观察发现,cookie中设置的token已经在浏览器端了,证明不是浏览器端丢失了,所以之后排查Nginx配置及B系统项目配置发现,A、B系统的项目跟路径设置的都是 / ,而A系统跳转到B系统是通过前端路由转发的cxjg开头,用于设置不同的location,这就导致,Nginx在反向代理后,将path为/ 的cookie带给了B系统,而不是将path为/cxjg下的cookie带给B系统,所以最终获取不到我们需要的token。
- 问题解决:将B系统项目根路径换成 /cxjg ,这样就可以获取到了。
- 问题反思:之前别人配置的思路有问题,导致静态资源及token都获取不到,所以在我排查出来之后进行记录,一般情况下也不会出现这种问题,因为一般不同的系统都会设置不同的项目跟路径(规范的话),所以以后项目要写的规范些。
不喜勿喷,就是随笔记录一下,希望给同样业务场景的人快速解决这个问题。因为排查过程中还是很不容易发现的。转载请标明出处


版权声明:本文为fengy_jav原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。