如果所有的后端都被标记为“恶心”,有没有办法让Varnish 4忽略高速caching中的任何传递对象?
以下是我试图改进的故障场景:
vcl_backend_response查看这些响应,并将它们标记为TTL为120s的vcl_backend_response 。 vcl_hit – “ if (obj.ttl + obj.grace > 0) .... ) 我提出的一个解决方法是,如果来自状态500的响应,则缩短传递命中对象的TTL:
sub vcl_backend_response { if (beresp.ttl <= 0s && beresp.status == 500) { set beresp.ttl = 10s; set beresp.uncacheable = true; # return inside this if statement to allow builtin vcl_backend_response to run return (deliver); } }
其他可能性是调整健康检查的间隔和阈值,或者提出更好的健康检查。
但是除此之外,有没有办法明确告诉Varnish:“是的,你有一个通行证,但看起来 – 所有的后端生病了!不要打扰,现在转换到宽限期模式。
如果你想要这样的行为, 当你从后端得到500个响应的时候 , 你应该避免创buildhit-for-pass对象 。
假设(1)您总是请求相同的可cachingURL /对象X; (2)对象X当前存储在清漆存储器中,TTL为1小时,宽度为24小时。 现在假设以下时间表:
当你从后端得到500个响应时,这里的解决scheme将避免创build点击对象。 而是简单地放弃请求。 在t = 3603和t = 4000这样的方式,你会发送一个停滞的对象副本到客户端。