【发布时间】:2016-01-03 14:25:04
【问题描述】:
我对在 varnish 4 中设置宽限时间的位置感到困惑。我已经看到了 VCL 在 vcl_recv
中设置宽限时间的示例sub vcl_recv {
...
set req.http.grace = 60m;
...
}
其他人将其设置在 vcl_hit
sub vcl_hit {
...
set obj.grace = 60m;
...
}
并在文档 (https://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html) 中设置了 vcl_backend_response
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);
}
}
这是正确的方法吗?
【问题讨论】:
标签: varnish-vcl varnish-4