清漆:如何caching失败,总是询问后端是否健康?

我想用以下方式configuration清(仍然在版本3上):

如果后端可用,则每个请求都应该转到后端,因此不应使用caching的结果。 如果后端不可用(如此不健康),我想使用第二天的caching结果。 如果一天之后后台仍然不健康,应该显示错误。

我尝试了使用宽限制机制的下列configuration,但是这不起作用:虽然所有的请求都进入后端(所以如果后端可用,所以没有caching的答案),在发生故障的情况下,我立即得到一个Varnish Error (不可用),而不是使用caching数据的清漆。 我究竟做错了什么?

sub vcl_recv { if (req.backend.healthy) { # No caching if backend is healthy set req.grace = 1s; } else { # Otherwise accept requests up to 1 day old set req.grace = 1d; } } sub vcl_fetch { # Cached requests are not valid at all set beresp.ttl = 1s; # Keep requests for ttl + 1 d set beresp.grace = 1d; } 

就我所知,这是不可能的。 只有高速caching的项目可以从宽限期提供。 你也许可以通过修改Varnish来完成,把C代码写入vcl。

清漆文档是非常详尽的,潜入他们也可以帮助: https : //www.varnish-cache.org/docs