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

 前几天同事解决了一个非常诡异的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; 
 
 

技术交流

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!

 

你可能感兴趣的:(nginx,PHP程序员技术精粹)