w1w 发表于 2018-12-27 06:51:29

squid中refresh_pattern参数

  refresh_pattern指令在squid配置文件中定义,此参数控制着数据在磁盘上缓存的时间。
  语法如下:
  refresh_pattern [-i] regexp min percent max
  1,regexp:是匹配正则表达式,注意这里是区分大小写的,使用-i选项来定义它忽略大小写

  

  2,min和max:单位是分钟,表示某个响应驻留在squid服务器的cache中的时间没有超过min限制,那么它不会过期,如果高于这个max限制,那么它必须被刷新。
  

  3,percent:['Percent' is a percentage of the objects age (time since last modification age) an object without explicit expiry time will be considered fresh.]
  要理解percent必须要了解LM-factor算法,在Squid.Definitive.Guide中有张图,如下:
http://s3.运维网.com/wyfs02/M02/6B/C8/wKioL1U3KQOx8cCLAABFH4AlAEo872.jpg
  last-modified和expires定义可以看下图:(Chrome浏览器按下F12进入调试模式)
http://s3.运维网.com/wyfs02/M00/6B/C8/wKioL1U3KreiiBQwAAFHo6fBidY727.jpg
  这里是一段响应报文首部(我们假设没有经过web缓存服务器,直接由原始服务器返回的数据)
  cache-control:HTTP1.1协议中定义,相对时长(相对于自身服务器时间而言)
  expires:HTTP1.0中定义,1.1兼容,绝对时间
  可以看到cache-control在某种程度上更加精准。
  last-modified:表示在原服务器上最后一次页面修改的时间。
  LM-factor算法定义:
  date表示数据从原服务器进入squid缓存服务器的时间。这里可以看到由percent决定了expires的时间:
  expires=date + [ date - (last-modified) ] * percent
  所以满足下面两个条件之一,则cache数据过期,用户访问时必须被refresh。
  1)缓存的数据在squid服务器中的时间超出refresh_pattern中定义的max值(相对时长)
  2)缓存的数据在squid服务器中的时间超出expires的时间(绝对时间)
  

  4,options中有些选项与http协议相违背:
  override-expire:用户请求时,squid服务器不会先检查原始服务器响应报文首部expires,而是先检查min,若小于min值,squid会直接返回一个未确认的cache命中。
  override-lastmod:该选项导致先检查min,再检查percent。若小于min值,squid会直接返回一个未确认的cache命中。
  reload-into-ims:squid在转发请求之前,对该请求增加一个If-Modified-Since头部。
  ignore-reload:squid服务器将忽略客户端请求时的no-cache指令。
  

  案例:
  refresh_pattern -i \.jpg$ 10080 50% 20160 override-expire ignore-reload reload-into-ims
  

  

  

  

  




页: [1]
查看完整版本: squid中refresh_pattern参数