我使用 squid 作为代理。但是当网站关闭并且缓存超过 squid.conf 中配置的最大时间时,我可以让 squid 在重新发布之前将旧缓存发送给客户端吗?如果 squid 可以这样做,如何配置?
答案1
您可以使用多个选项 - refresh_pattern、max_stale、refresh_stale_hit、icp_hit_stale
如果您不需要长时间提供陈旧内容,那么您可以只使用 refresh_stale_hit 选项。即:
refresh_stale_hit 1 分钟
这样,仅当对象过期时间少于 1 分钟时,才允许将刷新对象时的并发请求作为缓存命中进行处理。
答案2
squid 2.7 或 > 3.3 将使用 cache-control 标头 stale-while-revalidate 和 stale-if-error
标头('Cache-Control:公共,max-age = 0,s-maxage = 60,stale-while-revalidate = 120,stale-if-error = 600');
意味着:
浏览器不缓存(以避免双重缓存导致奇怪的事情)
鱿鱼缓存 60 秒
在接下来的 120 秒内提供过时的内容并更新缓存(将掩盖刷新缓存内容的延迟)
如果服务器返回错误,则在 10 分钟内提供过时的内容。