range_offset_limit
range_offset_limit这个参数,主要是对各种流媒体和要断点续传的文件的缓存的。缺省是0,也就是说只要client发过来的http header里包含了“Range:” ,squid会把这个请求转到后端http server,最致命的是,http server返回的内容并不会进入squid的cache store。
range_offset_limit就派上用场了,把它的值设置为-1;然后squid会把Range头去掉,而从后端http server把内容全部抓下来,放到cache store里,随后的对该cache的访问就不再转发到后端http server,可以大大提高命中率。也可以给这个参数设置一个值,会提前下载多少内容.但要注意,这个参数不要大过maximum_object_size ,不然下载完了,maximum_object_size 这个参数不能缓存这么多,又删除这个文件.白白点用你的流量.
缓存大文件的方法:
想缓存 40M文件
refresh_pattern -i \.exe$ 4320 100% 43200 ignore-reload
range_offset_limit -1 (缓存多线程下载的文件,比如下载工具下载的)
maximum_object_size 40 MB
而如果仅仅是单线程,不使用工具下载的话:
squid.conf改动仅仅如下:
maximum_object_size 150 MB
我访问了一个120MB左右的文件,log如下:
第一次访问:
192.168.2.68 - - [30/Aug/2010:20:17:23 +0800] "GET http://a.com/access.log104_2010_08_29.gz HTTP/1.1" 200 114460209 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; QQDownload 590; .NET CLR 2.0.50727)" TCP_MISS:DIRECT
第二次访问:
192.168.2.68 - - [30/Aug/2010:20:19:20 +0800] "GET http://a.com/access.log104_2010_08_29.gz HTTP/1.1" 200 114460218 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; QQDownload 590; .NET CLR 2.0.50727)" TCP_HIT:NONE
清空本地所有cache的第三次访问:
192.168.2.68 - - [30/Aug/2010:20:21:55 +0800] "GET http://a.com/access.log104_2010_08_29.gz HTTP/1.1" 200 114460218 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; QQDownload 590; .NET CLR 2.0.50727)" TCP_HIT:NONE
说明squid确实缓存上了这个120MB的文件。
quick_abort:
quick_abort_min (KB)
quick_abort_max (KB)
quick_abort_pct (percent)
控制squid是否继续传输被用户中断的请求。当用户中断请求时,squid把检测 quick_abort 的值。如果剩余部分小于“quick_abort_min”指定的值,squid 把继续完成剩余部分的传输;如果剩余部分大于“quick_abort_max”指定的值,squid 把终止剩余部分的传输;如果已完成“quick_abort_pct”指定的百分比,squid把继续完成剩余部分的传输。
比如我们对大量的大文件的cache系统可以这样处理
quick_abort_min 16 MB
quick_abort_max 16 MB
quick_abort_pct 80