原文链接:
IT运维专家网--"自由平等,互助分享!"
HTTP 1.1的规范建议所有的请求输出都包含Vary Header,目的是针对对前端
缓存服务器,增加针对Vary制定的各种Header类型进行不同的缓存处理,在
浏览器规格复杂的情况下,不利于缓存的命中,所以要在被缓存的
服务器上设置:
问题是这样被发现的:最近使用进行后台静态
文件加速。但是总是发现几乎是只
代理而不缓存,而内存缓存
模式又没有统计
工具查看缓存内容和命中率。转为用后,前端缓存目录空间增加非常快,以至于经常需要删除文件,而删除文件的I/O损失超过了直接
访问后
台访问的加速所得。后台明明只有几M模板图片和CSS文件,为什么缓存空间上G而且命中率那么低呢?查看了一下缓存目录下的文件,Apache的前端磁盘
缓存就会根据浏览器除了针对内容的.data文件和.header文件外还有一个.vary目录,而这个vary目录下又会按照顶级的cache规则再
mapping出2级目录来,目录节点个数过多造成磁盘空间的浪费:
a/b/Jqyw8OvBIlgaef7Zb8lQ.data
a/b/Jqyw8OvBIlgaef7Zb8lQ.header
a/b/Jqyw8OvBIlgaef7Zb8lQ.header.vary/a/b
当遇到和原有Vary不同的Header时,会在 header.vary目录下生成更多的缓存;从Apache的讨论组上看原因就是
IE的AcceptEncoding请求头信息里增加了一个空格;
IE : Accept-Encoding: gzip, deflate
Firefox: Accept-Encoding: gzip,deflate
于是按照Fernando的方法,将后台的Vary Header禁掉了。缓存空间立刻停止了增长(还是个别有header.vary目录出现)。
Squid 3.0中的隐藏配置:
引用
reply_header_access Vary deny all
如果用
nginx proxy 可以:
引用
proxy_hide_header Vary;
阅读(1245) | 评论(1) | 转发(0) |