如何在Varnish vcl_backend_error中增加obj.ttl

时间:2015-08-05 10:14:15

标签: varnish

由于你仍然可能拥有这个不太友好的后端,你可能想要在Varnish 4.x中增加obj.ttl。像这样:

sub vcl_backend_response{
    if(beresp.http.X-Response-Error == '1'){
        set obj.ttl = 120s;
        return (abandon);
    }
    return (deliver);
}

但是无法在vcl_backend_response中访问obj。 还有其他方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须使用Grace Mode。当Varnish处于宽限模式时,它会使用一个已经过期的对象,就TTL而言。

我使用this作为基础,并将其改编为Varnish 4.0

sub vcl_recv {
  #This is in case you have configured probe.
  if (std.healthy(req.backend_hint)) {
    set req.grace = 30s;
  } else {
    set req.grace = 1h;
  }
}

sub vcl_backend_response {
  set beresp.grace = 1h;
}

tl; dr(宽限模式链接)

  • 增强对象是一个已过期但仍保留在缓存中的对象。
  • 宽限期模式是指Varnish使用增强对象时。
  • req.grace定义了一个对象可以在多长时间内使Varnish仍然将其视为宽限模式。
  • beresp.grace定义了beresp.ttl-time Varnish保留对象的时间长度
  • req.grace通常根据后端的状态在vcl_recv中修改。