当后端明确设置 Cache-Control: no-cache 时,是否防止 varnish 缓存页面?

当后端明确设置 Cache-Control: no-cache 时,是否防止 varnish 缓存页面?

有时候某些页面需要避免被缓存,它们都具有后端设置的以下响应标头:

Cache-Control: no-cache, no-store, must-revalidate, max-age=0

然而,Varnish 还是会缓存这些页面。我可以在配置中添加什么来防止这种情况发生?我猜应该在vcl_delivervcl_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

相关内容