什么是清漆击中通过

时间:2017-03-20 07:56:07

标签: caching varnish varnish-vcl

当我们在清漆4.1服务器后面的应用程序上运行负载测试时,我们注意到在服务器出错后(500返回Cache-Control: no-cache)我们在后端遇到了负载豌豆。

Afer潜入清漆配置后,我们发现了该行https://github.com/varnishcache/varnish-cache/blob/master/bin/varnishd/builtin.vcl#L157

sub vcl_backend_response {
    if (bereq.uncacheable) {
        return (deliver);
    } else if (beresp.ttl <= 0s ||
      beresp.http.Set-Cookie ||
      beresp.http.Surrogate-control ~ "no-store" ||
      (!beresp.http.Surrogate-Control &&
        beresp.http.Cache-Control ~ "no-cache|no-store|private") ||
      beresp.http.Vary == "*") {
        # Mark as "Hit-For-Miss" for the next 2 minutes
        set beresp.ttl = 120s;
        set beresp.uncacheable = true;
    }
    return (deliver);
}

如果页面返回no-cache,则在接下来的2分钟内不会缓存,即使下一次调用后端返回有效的可缓存响应

我无法弄清楚为什么这是默认行为(因为很久以前根据存储库历史...)

在我的情况下,我的后端出错会产生500无缓存,然后导致更多流量,最后导致503 ......

我打算删除此规则但我想先了解它。

有任何线索吗?

提前致谢 微米。

1 个答案:

答案 0 :(得分:2)

您可能想要阅读

https://info.varnish-software.com/blog/hit-for-pass-varnish-cache

了解命中传球。