Nginx的Cache和Set-Cookie的冲突
上周,让NO同学帮忙检测了一下mail登录的数据
最后发现,结果很不理想,平均登录时间在50s左右
看了相关的数据后,发现以前的CDN也有一定的问题
首先,以前的CDN缓存时间太小,只有12个小时,几乎没啥用
再次,CDN似乎不太稳定,有时用户访问CDN的时间很长
经过和NO的同学讨论后,准备更改CDN
从js.sohu.com迁移到js.mail.sohu.com上
新的url是我们自己的服务器,上面存储一些静态的资源
NO同学负责更改该url的DNS解析,在全国范围内就近解析到最近的CDN上
他们的CDN实现似乎也很简单,Nginx+ProxyPass+Cache就搞定了
在测试过程中,有一个问题,郁闷2天了
静态的js文件,首次访问,CDN正常返回200
但按F5刷新后,CDN不是返回的304,而是继续返回200
但设置js.mail.sohu.com的host到我们的服务器,就能返回304
和NO同学调试了一天,才发现是Set-Cookie的header惹的祸
我们的js.mail.sohu.com上装了passport的module
当用户登录后访问,会设置相应的cookie,所以每个请求都会有这个header
但Nginx的Cache模块貌似是,发现有这个Set-Cookie的heaer后,就不cache了
所以,当用户按F5后,它不会返回304,而是向后台去请求返回200
最后,是这么解决的:
在nginx上配置清除那个header:
折叠复制代码
- more_clear_headers 'Set-Cookie';
当然,你的nginx需要编译进去headers-more-nginx-module这个模块
呵呵,可以proxy_pass_header的
参见:http://www.linuxzh.org/Linux/nginx_proxy_cache_ispconfig.html