Squid refresh_pattern 指令
2015-01-06 by dongnan
功能
refresh_pattern 指令间接的控制磁盘缓存。它帮助squid决定,是否某个给定请求是cache
命中或作为cache
丢失对待。
宽松的设置增加了你的cache
命中率,但也增加了用户接收过时响应的机会。另一方面保守的设置,降低了cache
命中率和过时响应。
refresh_pattern 规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires
头部,或者Cache-Control:max-age
指令来指定过时期限则无效。
你可以在配置文件里放置任意数量的 refresh_pattern
行。squid按顺序查找它们以匹配正则表达式。
当squid找到一个匹配时,它使用相应的值来决定,某个缓存响应是存活还是过期。
示例
语法:refresh_pattern [-i] regexp min percent max [options]
refresh_pattern -i \.jpg$ 30 50% 4320 reload-into-ims
refresh_pattern -i \.png$ 30 50% 4320 reload-into-ims
refresh_pattern -i \.htm$ 0 20% 1440
refresh_pattern -i \.html$ 0 20% 1440
refresh_pattern -i . 5 25% 2880
参数
regexp
参数,是大小写敏感的正则表达式。你可以使用-i
选项来使它们大小写不敏感。
squid按顺序来检查 refresh_pattern
行,当正则表达式之一匹配URI
时它停止搜索。
min
参数,是分钟数量。它是过时响应的最低时间限制。如果某个响应驻留在cache
里的时间没有超过这个最低限制,那么它不会过期。
而 max
参数是存活响应的最高时间限制。如果某个响应驻留在cache
里的时间高于这个最高限制,那么它必须被刷新。
在最低和最高时间限制之间的响应,会面对squid的最后修改系数算法。对这样的响应,squid计算响应的年龄和最后修改系数,然后将它作为百分比值进行比较。
响应年龄简单的就是从原始服务器产生,或最后一次验证响应后,经历的时间数量。源年龄在Last-Modified
和Date
头部之间是不同的。
LM-factor
是响应年龄与源年龄的比率。
理解squid检查不同值的顺序非常重要。如下是squid的refresh_pattern算法的简单描述:
- 假如响应年龄超过 refresh_pattern 的
max
值,该响应过期。 - 假如
LM-factor
少于 refresh_pattern 百分比值,该响应存活。 - 假如响应年龄少于 refresh_pattern 的
min
值,该响应存活。 - 其它的情况下响应过期。
refresh_pattern 指令也有少数选项导致squid违背HTTP协议规范,如下:
- override-expire,该选项导致squid在检查
Expires
头部之前,先检查min
值。 这样,一个非零的min
时间让squid返回一个未确认的cache
命中,即使该响应准备过期。 - override-lastmod,改选项导致squid在检查
LM-factor
百分比之前先检查min
值。 - ignore-reload,该选项导致squid忽略请求里的任何
no-cache
指令。 - reload-into-ims,该选项让squid在确认请求里,以
no-cache
指令传送一个请求。 换句话说 squid在转发请求之前,对该请求增加一个If-Modified-Since
头部。 - 注意这点仅仅在目标有
Last-Modified时
间戳时才能工作。外面进来的请求保留no-cache
指令,以便它到达原始服务器。
参考
内容来自:squid 权威指南