我正在尝试使用最后修改的标题使Varnish工作,但无论我做什么,我的页面都会在120秒内缓存,而Varnish永远不会在后端重新验证。
我的后端正在发送这些标题:
Cache-Control: must-revalidate, proxy-revalidate, public, stale-while-revalidate=0
Last-Modified: Fri, 22 Jan 2016 03:32:33 GMT
当我在命中时记录对象的TTL时,它的值总是设置为120秒。
我正在使用 Varnish 4的默认VCL 配置。
此致
编辑:经过一些搜索,我发现120s是Varnish的默认ttl值。但他为什么忽视最后修改过的?
答案 0 :(得分:1)
设置" s-maxage"或" max-age" Cache-Control标头的属性:
beresp.ttl使用它找到的第一个值进行初始化:
The s-maxage variable in the Cache-Control response header field The max-age variable in the Cache-Control response header field The Expires response header field The default_ttl parameter.
答案 1 :(得分:1)
我从Varnish邮件列表中得到了答案,以便模仿"必须重新验证"标题,必须添加这块VCL:
sub vcl_backend_response {
if (beresp.http.cache-control ~ "must-revalidate") {
set beresp.ttl = 1s;
set beresp.grace = 0s;
set beresp.keep = 1w;
}
}
它仅适用于Varnish 4。
我引用了1s ttl的原因:
这样,您只需缓存1秒钟(不要将其设为0,或全部 对这个对象的请求将按顺序完成,但会保留 一个星期的对象,每次请求时重新验证它 它的ttl已过期。