首先搞清楚2个东西:
1、Last-Modified:这个是网页最后修改的时间。可在head中设置。squid在将页面缓存时,如果没有设置该属性,squid会自动将Last-Modified设置为访问时间。
2、Expires:网页过期的时间。如果网页过期,squid会去访问webserver重新读取页面。
那么,对于动态页面,需要在页面中加上如下代码(php):
//设置最后修改时间为当前时间
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
//设置过期时间为1天(按秒计算)
header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24). " GMT");
且以上内容要放在PHP文件的最前面。
对于一些无法或不便于设置Last-Modified和Expires的文件如图片或者是论坛,我们可以在squid.conf中设置refresh_pattern来控制缓存时间:
refresh_pattern 的语法是
refresh_pattern [-i] regexp min percent max [options]
regexp 是文件类型。教学网 eduyo.com
min, max的单位是分钟,percent就是百分比。
refresh_pattern 的算法如下:
1) If (当前时间-最后修改时间) < min),cache是新鲜的
2) else if (当前时间-最后修改时间) < (min + (max-min)*percent),cache是新鲜的
3) else cache是过期的
cache过期就需要从后面server取新鲜内容。
如:设置htm文件过期时间为10分钟
refresh_pattern .htm 0 25% 8
至于参数,请大家自行研究
以上设置在centos6 + squid + nginx环境中测试成功。
(责任编辑:ken)