squid缓存规则验证
1. 测试环境
注意事项:
(1)服务器端得添加防⽕墙规则或者直接关闭,测试的话建议直接关闭!
(2)保持源站,缓存服务器,客户端的时间同步,这个对后续测试缓存超时lm-factor算法精确度上有影响。
2 实测项⽬
2.1 请测试不匹配refresh_pattern或者hash_refresh_pattern任何规则的URI从返回后cache缓存的情况?
这⾥缓存服务器端采⽤默认f,不添加refresh_pattern, hash_refresh_pattern 规则验证
2.2.1 源站没有指定Expires ,Cache-control等头信息
测试客户端第⼀次请求,缓存服务器(后续简称CDN)是miss的,这时候会回源去取⽂件,再返回给客户端,之后将⽂件缓存下来。这时候其实有个默认的max-age产⽣,过期时间为259200秒。后续在这个缓存时间内,客户端的请求,CDN都会直接返回缓存⽂件,产⽣⼀次hit命中。超过这个缓存时间的请
求,CDN会回源确认缓存⽂件是否有修改,有修改则先更新⽂件再返回客户端,没修改则直接本地缓存⽂件返回给客户端。
客户端⼀次请求,CDN miss,回源取⽂件返回给客户端
ignore和miss的区别
CDN 上⾯抓到往host:的GET请求
注:这⾥的max-age=259200
客户端的第⼆次请求,CDN直接是hit命中返回
2.1.2 源站指定no-cache
对于源站指定no-cache,no-store等头信息时,CDN默认是不缓存,所以客户端的每次请求,CDN都会miss, 然后回源取⽂件返回客户端。
第⼀次请求miss
第⼆次请求也是miss
CDN 对客户端每次请求都抓到回源GET信息
2.1.3 源站指定max-age
对于源站指定max-age信息,CDN这边会默认采⽤给定的max-age作为⽂件缓存时间,超过这个时间后,客户端如果有请求,CDN会发送带有If-Modified-Since头信息的请求回源确认⽂件是否修改,有修改则先更新⽂件再返回客户端,没修改则直接本地缓存⽂件返回给客户端,并产⽣⼀次hit命中。下⾯例⼦中,源站设置的max-age为60s
客户端第⼀次请求 miss
max-age 时间内,请求都是hit
缓存时间操作max-age时,CDN回源确认⽂件是否有修改过
总结:对于no-store , Expires < now 等其他情况,CDN默认不配置refresh_pattern 或 hash_refresh_pattern 情况下,都会遵从源站的⽅式,如no-store ,则不会在本地保存⽂件,客户端来的请求,CDN回源,Expires < now 则对于客户端来的请求,CDN 每次都会回源验证⽂件是否修改。
2.2 验证LM-factor算法
Squid 完整的缓存机制:
FRESH if expires < now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE
从上往下,也代表着缓存控制策略的优先级由⾼到底!!
这⾥我打算按照squid 完整缓存机制验证下不同条件下,对于缓存过期时间的判断,同时也包含lm-factor
2.2.1 FRESH if Expires < now
客户端第⼀次请求
客户端第⼆次请求
可以看到服务器端expires 配置过期时间为2012年XX ,⽽当前时间响应时间为2014年XX ,满⾜Expirs < now 。默认不忽略Expires情况下,第⼀次请求CDN miss ,后续每次请求,缓存⽂件都是过期的,cache机器都带着‘If-Modified-Since’  回源验证,如下图:
2.2.2 STALE if age > max

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。