设为首页 收藏本站
查看: 1666|回复: 0

[经验分享] squid中refresh_pattern参数用法及解释

[复制链接]

尚未签到

发表于 2018-12-26 10:08:39 | 显示全部楼层 |阅读模式
  refresh_pattern指令如下:
  refresh_pattern [-i] regex min percent max [options]
  * percent与Min、Max两个值是完全没有关系
  先理解什么情况下响应过期:
  1.缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max ,该响应过期;
  2.缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-
  Modified时间)*percent,该响应过期;
  override-expire
  该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。
  override-lastmod
  改选项导致squid在检查LM-factor百分比之前先检查min值。
  reload-into-ims
  这个参数不是refresh_pattern中的参数,他是一个单独的参数.
  在flashget和迅雷之类的软件,下载时发送http header时会包含下列信息:
  Cache-Control:no-cache
  Pragma:no-cache
  这样的话squid主机接受这http header以后会让squid服务器直接连接web server取新的数据。这样对服务器很大的压力,
  reload-into-ims参数的意思是将client请求的no-cache或reload请求转变成If-Modified-Since,而If-Modified-Since这个参数是用于判断文件是否被modified,这时squid和RS之间的数据传输仅仅只是验证文件是否更新或更改,如果RS返回的是文件未被更改,则直接由squid的cache文件返回给client,如果更改了,再到后端RS获取最新的文件并被squid缓存,这样做可以节省带宽,增加访问速度。
  这个参数违反 HTTP 协议,但是对大部分网站来说是可以设置为 on 的,只要后端服务器对If-Modified-Since 头的判断正确即可。
  大概意思是:只在源服务器上文件变动的情况下才实际更新cache当中的内容。
  ignore-reload
  1.不能通过 % squidclient -r http://www.lrrr.org/junk >/tmp/foo来强迫缓存响应更新
  2.忽略浏览器的刷新操作(刷新操作会强迫squid调用新页面)
  3.该选项导致squid忽略请求里的任何no-cache指令,会强行缓存.除非正常从squid过期(希望页面一进入cache就不删除,直到被主动purge掉为止)
  ignore-no-cache
  该选项处理http头部信息:
  Pragma: no-cache
  Cache-control: no-cache
  ignore-no-store ignore-ridate
  以上两个选项是为了处理http头部信息:
  Cache-Control: no-store, must-ridate
  Cache-Control: no-cache, must-ridate
  ignore-no-cache ignore-private
  处理http头部信息:Cache-Control: no-cache, must-ridate
  Pragma: no-cache
  这两行是控制浏览器的缓存行为的,指示浏览器不得缓存
  以上两个参数就是为了处理动态文件不能被缓存的问题.
  eg:

  refresh_pattern   -i \.jpg$      180    90%    1440  >
  refresh_pattern   -i http://xxx/jobs_nv/ajax_keywords.asp  1440 50% 10080 override-expire override-lastmod>  第一个例子是缓存jpg,第二个例子是缓存动态文件asp
  ignore-reload和reload-into-ims的区别:
  ignore-reload 会强行缓存,对no-cache当没有见到,但使用  reload-into-ims,当有no-cache的请求发过来时,他会发一个http头部回去问源服务器(上层服务器),是否有修改,如果修改就更新,如果没有就返回给客户.
  regexp参数是大小写敏感的正则表达式。你可以使用-i选项来使它们大小写不敏感。squid按顺序来检查refresh_pattern行;当正则表达式之一匹配URI时,它停止搜索。
  理解squid检查不同值的顺序非常重要。如下是squid的refresh_pattern算法的简单描述:
  假如响应年龄超过refresh_pattern的max值,该响应过期;
  假如LM-factor少于refresh_pattern百分比值,该响应存活;
  假如响应年龄少于refresh_pattern的min值,该响应存活;
  其他情况下,响应过期。
  在squid.conf.default里面,refresh_pattern参数下面的注释是这样的:
  TAG: refresh_pattern
  usage: refresh_pattern [-i] regex min percent max [options]
  Basically a cached object is:
  FRESH if expires < now, else STALE
  STALE if age > max
  FRESH if lm-factor < percent, else STALE
  FRESH if age < min
  else STALE
  以上所有的时间都是以分钟为单位计算。
  ·         refresh_pattern指出的缓冲对象过期了,这个对象过期。
  ·         refresh_pattern指出的缓冲对象在squid的cache缓冲的时间大于max的话,这个对象过期。
  ·         refresh_pattern指出的缓冲对象的lm-factor大于等于percent的话,这个对象过期。
  ·         refresh_pattern指出的缓冲对象在squid的cache缓冲的时间小于min的话,这个对象不过期。
  可是,这个lm-factor到底是怎么算的?有什么具体意义? look下面的图:
  上面这张图来自于《Squid.Definitive.Guide》第七章,对squid的LM-factor算法作出了一个很直观的描述。
  请注意这张图的起始时间坐标:Last-Modified,这个是由squid读取的原始web数据所规定的。
  然后就是Date,这个是原始数据进入squid的缓冲的时间。
  最后就是Expires,这个就是原始数据在squid中的缓冲过期时间。
  可以很容易的得出结论,对于LM-factor算法来说,原始数据在squid中的缓冲时间为
  (原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent
  所以,我们可以郑重得出结论,在squid的refresh_pattern设置中,percent与Min、Max两个值是完全没有关系!
  最后总结一下,对于squid来说,缓冲的数据在cache中的存活时间是这样决定的:
  如果有定义refresh_pattern:只要满足以下两个条件之一,缓冲对象过期
  缓冲对象在squid的cache缓冲的时间大于refresh_pattern定义的max
  缓冲对象在squid的cache缓冲的时间大于(原始数据进入squid的缓冲的时间-原始web数据所规定的Last-Modified时间)*percent
  如果符合多个refresh_pattern定义,以第一条符合定义的refresh_pattern为准
  如果没有符合定义的refresh_pattern,则按squid的默认处理规则
  Squid 反向代理一般只缓存可缓冲的数据(比如 html 网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 WEB 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要 HTTP 头标记:
  Last-Modified: 告诉反向代理页面什么时间被修改
  Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
  Cache-Control: 告诉反向代理页面是否应该被缓冲
  Pragma: 用来包含实现特定的指令,最常用的是 Pragma:no-cache
  例如:http://bbs.linuxtone.org/viewthread.php?tid=138
  refresh_pattern 20%
  假设源服务器上www.aaa.com/index.htm -----lastmodified 是 2007-04-10 02:00:00
  squid上 proxy.aaa.com/index.htm index.htm进入cache的时间 2007-04-10 03:00:00
  1)如果当前时间 2007-04-10 03:00:00 也就是说squid刚刚缓存上
  源年龄  =3点-2点=60分钟  对象进入cache的时间 - 页面自身修改时间
  响应年龄 =0分钟           当前时间- 对象进入cache的时间
  index.htm还可以在cache停留的时间(源年龄)*20%=12分钟
  也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。
  2)如果当前时间 2007-04-10 03:05:00  也就是说squid已缓存了5分钟
  源年龄  =3点-2点=60分钟
  响应年龄 =5分钟
  index.htm还可以在cache停留的时间(源年龄 )* 20% - 响应年龄 = 12分钟-5分钟=7分钟
  LM-factor=响应年龄/源年龄=5/60=8.3%

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655965-1-1.html 上篇帖子: squid配置文档 下篇帖子: [Squid] Squid3.0与2.7的配置差异
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表