在6.2中强制ttl

时间:2019-06-03 10:31:10

标签: varnish-vcl

我一直在查看最新版本的Varnish(6.2),并且在从vcl_hit中删除return(miss)时遇到问题。

因此,我们的用例是我们希望将事物缓存一定的时间,然后强制使用清漆来检索新内容,在以前的版本中,以下方法效果很好

sub vcl_hit {

        if (obj.ttl >= 0s) {
            return (deliver);
        }
        else
        {
            return (miss);
        }
    }

但是在6.2中,return(miss)已被删除,我们希望强制始终正确刷新内容。

我查看了return(pass),但是从文档中可以看出,该响应不会被缓存,这不是我们想要的。

和return(fetch)一段时间以来一直不是一种选择,但是我正在努力寻找替代方法吗?正如文档中建议的return(restart)一样,它会循环回到同一位置。

我应该在别处寻找并尝试禁用宽限期/圣餐吗?

1 个答案:

答案 0 :(得分:0)

vcl_hit是错误的子例程,出于多种原因,主要的原因是您使用的是一种复杂的方法,具有副作用,可以完成一些琐碎的事情。只要做:

sub vcl_backend_response {
    # set the ttl
    set beresp.ttl = 5m;
    # after ttl is gone, grace kicks in during which
    # content is revalidated asynchronously
    set beresp.grace = 2h;
    # after grace, keep kicks during which
    # content is revalidated synchronously
    set beresp.keep = 3d;
}

您的代码段等同于设置宽限期并保持为0s