跳转至

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-ModifiedDate头部之间是不同的。 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 权威指南

欢迎关注微信公众号: 运维录

Back to top