解决前端控制台cookie丢失token问题:nginx+zuul配置

版权申诉
4 下载量 109 浏览量 更新于2024-09-10 收藏 408KB PDF 举报
"在开发过程中遇到的一个问题,即在控制台中发现登录后cookie未携带token,导致无法进行无状态请求。这个问题经过排查,最终发现是由于nginx反向代理和Zuul网关的配置问题所引起。" 文章内容详细解释如下: 在Web应用程序中,实现用户登录功能并进行无状态请求时,通常会使用token来验证用户身份。当开发者在项目(https://github.com/hx1098/leyou)中设置cookie并尝试在控制台查看时,发现登录成功后cookie并未携带token。即使使用Postman进行测试,请求能够成功且携带token,但在实际浏览器环境中却出现问题。 首先怀疑的问题源头是nginx服务器或Zuul网关。通过调试,发现在设置cookie的`setDomainName`步骤中,IP地址从`192.168.6.129`变为`127.0.0.1:8087`,这可能是由于nginx的反向代理导致的。为解决此问题,可以在nginx的配置文件中添加如下代码: ```nginx proxy_set_header Host $host; ``` 然而,仅修改nginx配置并不足够,因为Zuul网关也有反向代理功能。在Zuul的`application.yml`配置文件中,需要添加以下内容: ```yaml zuul: add-host-header: true # 添加Host头 sensitive-headers: # 覆盖敏感头信息,允许cookie写入 ``` 原本,Zuul有一个过滤器会忽略包括`cookie`和`setCookie`在内的敏感头部信息,因此即使在nginx中做了配置,也无法成功设置cookie。通过覆盖`sensitive-headers`,确保cookie能被正常写入。 总结来说,为解决控制台中cookie不携带token的问题,需要在三个方面进行调整: 1. nginx配置中添加`proxy_set_header Host $host;`以正确传递Host信息。 2. Zuul的`application.yml`配置中开启`add-host-header`,添加Host头。 3. 同时在Zuul的配置中覆盖`sensitive-headers`,允许cookie写入。 经过上述修改并重启相关服务后,cookie应能在浏览器控制台中正常携带token,从而实现无状态请求。这是一个关于Web应用中跨域通信、反向代理以及安全配置的实际案例,对于理解和处理类似问题具有参考价值。