您的位置:首页 > 运维架构 > Nginx

nginx缓存页面+cookie后 串会话问题

2017-07-15 10:52 155 查看
 前几天同事解决了一个非常诡异的bug,用户的对话中,出现了非自己的说的内容。他给我们分享的这个bug得产生的原因,以及解决过程,我觉得很有意义,所以总结写篇博客。



1 产生bug的原因?

   


用户A请求 /index/index页面

A1:发起/index/index请求。

A2,A3:Nginx发现index/inde缓存的页面失效

A4:从后端的web server中获取index/index信息

A5:缓存A用户的响应头(包括cookie信息)+内容信息

A6:发送给用户数据,这时候会把响应头的cookie信息写入到浏览器。

缓存B用户的响应头(包括cookie信息)+内容信息

B1:发起/index/index请求。

B2:nginx发现index/index缓存的信息没有失效,直接把缓存的响应头+页面内容返回给了B

B3:B响应头里面是A的cookie信息,这时候,会把A的cookie种在A的浏览器里面,这时候A与B就串会话了。

2 怎么发现bug的?

 通过curl -v 调试页面,发现响应头会进行写入cookie操作



3 怎么解决?

nginx会把响应页面的头信息也一起缓存,包括Set-cookie,导致后面访问页面的用户的cookie被设置成缓存的头。 解决方案,nginx提供proxy_hide_header的指令,可以去掉相关的响应头信息: 

proxy_hide_header Set-Cookie; 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: