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 reload-into-ims ignore-no-cache
refresh_pattern -i http://xxx/jobs_nv/ajax_keywords.asp 1440 50% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
第一个例子是缓存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%<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) * 百分比,一直到被重新确认。
squid中refresh_pattern参数用法及解释
精选 转载文章标签 职场 休闲 squid refresh-patter 文章分类 服务器
上一篇:squid日志参数详解
下一篇:squid错误排查
-
squid 参数 refresh_pattern 解释
refresh_pattern指令间接的控制磁盘缓存。它帮助squid决定,是否某个给 定请求是cache命中,或作为cache丢失对待。宽松的设置增加了你的cache命中率,但也增加了用户接收过时响应的机会。另一方面,保守的设置, 降低了cache命中率和过时响应。refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Cont
squid refresh_pattern reload-into-ims override-lastmod ignore-reload override-expire -
refresh_pattern参数详解(一)
Squid可以用refresh_pattern参数设置缓存文件的过期时间.语法如下:refresh_pattern [-i] regex min percent max [options]Min与max单位为分钟如果想精确设置过期时间,中间的percent最好不要使用.例如缓存5分钟过期的话,可以设置参数如下:&n
squid refresh_pattern参数 Ignore-reload ignore-no-cache override-expire -
系统参数优化及解释
linux 系统参数优化及说明
linux 系统优化 -
flutter easy_refresh ClassicHeader 参数解释 flutter provider selector
在flutter中状态管理是重中之重,每当谈这个话题,总有说不完的话。在正式介绍 Provider 为什么我们需要状态管理。如果你已经对此十分清楚,那么建议直接跳过这一节。 如果我们的应用足够简单,Flutter 作为一个声明式框架,你或许只需要将 数据 映射成 视图 就可以了。你可能并不需要状态管理,就像下面这样。 但是随着功能的增加,你的应用程序将会有几十个甚至上百个状态。这个时候你的应用应该
flutter ios objective-c swift xcode