我对在 varnish 4 中设置宽限时间的位置感到困惑。我已经看到示例 VCL 在vcl_recv中设置宽限时间
sub vcl_recv {
...
set req.http.grace = 60m;
...
}
其他人将其设置在vcl_hit
sub vcl_hit {
...
set obj.grace = 60m;
...
}
并在他们在vcl_backend_response中设置的文档(https://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html)中
sub vcl_backend_response {
...
set beresp.grace = 60m;
...
}
我还看到了在vcl_recv和vcl_backend_response中设置宽限时间的示例。
谁能解释一下为什么要把它放在一个特定的地方?
在实践中,我想根据后端是否被认为是健康的来设置宽限时间;直观地说,我会在 varnish 联系后端之前设置它,所以我会在vcl_recv中设置宽限时间,并决定是否从vcl_hit中的缓存服务器,如下所示:
sub vcl_recv {
...
if (std.healthy(req.backend_hint)) {
set req.http.grace = 2m;
} else {
set req.http.grace = 60m;
}
...
}
sub vcl_hit {
if (obj.ttl >= 0s) {
# A standard hit, deliver from cache
return (deliver);
}
elsif (obj.ttl + obj.grace > 0s) {
# page expired, serve from cache in the meantime
return (deliver);
} else {
return (fetch);
}
}
这是正确的方法吗?