对提高squid命中率的一些研究 

   如何提高Squid的命中率是很多linux管理员比较头疼的问题,比如说在refresh_pattern这参数后面加入ignore-no-cache ignore-private reload-into-ims override-expire override-lastmod ignore-no-store refresh-ims这样的参数以提高命中率,其实还有一个地方往往是比较容易忽略vary_ignore_expire on这个参数。

   我们来看一下squid对vary头信息的解释:vary机制是http1.1 协议的新特性,使得server端可以根据用户请求返回给用户不同的内容,现在互联网中应用vary最广的一点就是对压缩的支持,例如当用户请求带着header “Accept-Encoding: gzip,deflate”,表明用户期望从server端拿到压缩的内容,这样server端会给用户一个包含压缩内容的文件,并带着vary头“vary: Accept-Encoding”头,和“Content-Encoding:gzip ”头,如果用户请求非压缩的内容,源站也就可以给用户非压缩的内容。squid对vary机制的支持是这样的,因为它要对用户请求的内容给出不同vary的内容,因此对于一个url在cache上需要存多份,就拿压缩、非压缩这两份来举例说明,它采用索引文件的形式,在索引文件中存着相应内容的vary文件索引,我们把索引的文件成为索引object,其它两个文件叫做vary Object,这样其实在cache中实际存储的文件数是3个。存储是索引object的key值由url,method计算出来,其它两个索引的object的key由url,method,和vary头计算出来,所以是三个不同的索引文件。

 如果有一些服务器的web应用程序提供的还是http1.0的协议的话,对于vary_ignore_expire on这个参数是有作用的。因为默认vary_ignore_expire是off,如果http1.0的vary信息里带有过期时间的话,squid还是不能缓存住。这时我们开始这个参数对提高命中率会有一定帮助