当我们在清漆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 ......
我打算删除此规则但我想先了解它。
有任何线索吗?
提前致谢 微米。
答案 0 :(得分:2)