ワニス 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の両方で猶予時間が設定されている例も見ました。
特定の場所に設定したい理由を誰か説明してもらえますか?
実際には、バックエンドが正常であると見なされるかどうかに応じて、猶予時間を設定したいと考えています。直感的に、ワニスがバックエンドに接続する前に設定するので、 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);
}
}
これは正しいアプローチですか?