我一直在查看最新版本的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)一样,它会循环回到同一位置。
我应该在别处寻找并尝试禁用宽限期/圣餐吗?
答案 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
。