有时候某些页面需要避免被缓存,它们都具有后端设置的以下响应标头:
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
然而,Varnish 还是会缓存这些页面。我可以在配置中添加什么来防止这种情况发生?我猜应该在vcl_deliver
或vcl_fetch
子程序中添加一些内容,但文档不太有用(无论如何对我来说)。
基本上在寻找一些东西像这样但反过来说-应该检查响应的标题。
Varnish 是 3.0 版本(不,现在无法升级)
相关配置:
sub vcl_fetch {
if (req.http.X-Varnish-Use-Cache && beresp.status != 500) {
set beresp.ttl = 24h;
set beresp.do_esi = true;
unset beresp.http.Set-Cookie;
}
return (deliver);
}
sub vcl_deliver {
if(!resp.http.X-Cache) {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
} else {
if (obj.hits > 0) {
set resp.http.X-Cache = resp.http.X-Cache + ", HIT";
} else {
set resp.http.X-Cache = resp.http.X-Cache + ", MISS";
}
}
set resp.http.X-Flavour = req.http.X-Flavour;
return (deliver);
}
答案1
Varnish 应该尊重Cache-Control
标题。
最可能的原因是return (deliver)
您的vcl_fetch
程序将绕过 Varnish 的默认处理,而默认处理通常会应用设置Cache-Control
并将内容标记为不可缓存。
因此我建议您将其从底部删除vcl_fetch
。