设为首页收藏本站

全球主机交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: discuz
查看: 342|回复: 0
打印 上一主题 下一主题

squid缓存设置--控制页面的缓存时间

[复制链接]
  • TA的每日心情
    无聊
    2017-9-11 09:24
  • 签到天数: 203 天

    [LV.7]常住居民III

    跳转到指定楼层
    楼主
    发表于 2016-2-18 15:40:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    refresh_pattern的作用:
    用于确定一个页面进入cache后,它在cache中停留的时间。
    refresh_pattern 只对后端没设置Expires过期时间的页面起作用,比如论坛页面;而对类似apache mod_expires 设置过的页面不起作用

    语法:
    • refresh_pattern [-i] regexp min percent max [options]

    复制代码
    几个概念:
    resource age =对象进入cache的时间-对象的last_modified
    response age =当前时间-对象进入cache的时间
    LM-factor=(response age)/(resource age)
          举个例子,这里只考虑percent, 不考虑min 和 max
    例如: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
    resource age =3点-2点=60分钟
    response age =0分钟
    index.htm还可以在cache停留的时间(resource age)*20%=12分钟
    也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。
    2)如果当前时间 2007-04-10 03:05:00
    resource age =3点-2点=60分钟
    response age =5分钟
    index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7
    LM-factor=5/60=8.3%<20%
       一直到2007-04-10 03:12:00   LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。
      如果这时没有index.htm的请求,index.htm会一直在缓存中,如果有index.htm请求,squid收到该请求后,由于已经过期,squid会向源服务器发一个index.htm是否有改变的请求,源服务器收到后,如果index.htm没有更新,squid就不用更新缓存,直接把缓存的内容放回给客户端,同时,重置对象进入cache的时间为与源服务器确认的时间,比如2007-04-10 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age变长,相应在cache中存活的时间也变长。
      如果有改变则把最新的index.htm返回给squid,squid收到会更新缓存,然后把新的index.htm返回给客户端,同时根据新页面中的Last_Modified和取页面的时间,重新计算resource age,进一步计算出存活时间。
      实际上,一个页面进入cache后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认。
      理解了百分比后,min max就好理解了
    squid收到一个页面请求时:
    1、计算出response age,
    2、如果response age<min 则 fresh 如果response age>max 则 stale
    3、如果response age在之间,如果response时间<存活时间,fresh,否则stale
    常用的几个参数的意思
    override-expire
    该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。
    override-lastmod
    改选项导致squid在检查LM-factor百分比之前先检查min值。
    reload-into-ims
    该选项让squid在确认请求里,以no-cache指令传送一个请求。换句话说,squid在转发请求之前,对该请求增加一个If-Modified- Since头部。注意这点仅仅在目标有Last-Modified时间戳时才能工作。外面进来的请求保留no-cache指令,以便它到达原始服务器。
    一般情况可以使用 reload-into-ims。它其实是强行控制对象的超时时间,这违反了http协议的精神,但是在带宽较窄的场合,可以提高明显系统相应时间。
    举例:
    refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims
    refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims
    refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims-
    refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims
    refresh_pattern -i \.hml$ 1440 90% 129600 reload-into-ims
    refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
    refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
    refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload
    refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
    refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims
    ignore-reload
    该选项导致squid忽略请求里的任何no-cache指令。
    所以。如果希望内容一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项,这个我们常用在mp3,wma,wmv,gif之类。
    Examples:
    refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload
    refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload
    refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload
    refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
    refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload
    refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload
    -------------------------------------------------------------------------------------------


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|手机版|中国U网    

    GMT+8, 2024-6-30 19:10 , Processed in 0.070048 second(s), 21 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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