バックエンドが時々「遅く」なるワニスキャッシュ(バージョン4)があります。このバックエンドが飽和しないように「遅い」場合、ヘルスチェックを使用して、ワニスがキャッシュから古いコンテンツを提供するように強制します。
したがって、mi バックエンドが定義されます。
backend api {
.host = "111.111.111.111";
.port = "80";
.first_byte_timeout = 300s;
.probe = {
.url = "/some/url";
.expected_response = 200;
.timeout = 80ms;
.interval = 120s;
.window = 1;
.threshold = 1;
}
}
backend apibackup {
.host = "111.111.111.111";
.port = "80";
.first_byte_timeout = 300s;
.probe = {
.url = "/some/url";
.expected_response = 200;
.timeout = 80ms;
.interval = 120s;
.window = 1;
.threshold = 1;
}
}
そして、猶予モードを構成します。
sub vcl_hit {
if (obj.ttl > 0s) {
# A standard hit, deliver from cache
return (deliver);
}
elsif (std.healthy(req.backend_hint)) {
if (obj.ttl + 30s > 0s) {
# page expired within a limited grace time and backend
# is healthy: deliver from cache while cache is updated
# asynchronous
return (deliver);
} else {
# page expired too long ago - fetch from backend
return (fetch);
}
}
else {
if (obj.ttl + obj.grace > 0s) {
# backend is not healthy - provide the page from cache
# during full grace time set in vcl_backend_response
return (deliver);
} else {
# page expired for the full grace time and backend is
# considered unhealthy - try to contact the backend
# anyway
return (fetch);
}
}
}
ただし、この構成でのみ、バックエンドが異常でオブジェクトがキャッシュに存在しない場合、varnish は 503 を返します (バックエンドから取得したい)。この動作を回避するには、同じ conf を vcl_miss に配置して、「問題のある」バックエンドからコンテンツを強制的に取得する必要があります。
sub vcl_miss{
if (std.healthy(req.backend_hint)) {
return (fetch);
}
else {
set req.backend_hint = apibackup;
return (fetch);
}
}
このようにして、結果は期待どおりです。バックエンドが遅い場合、ワニスはキャッシュから古いコンテンツを提供し、応答時間が改善されます。
しかし、私は今、より多くの「合格」要求を持っていることを発見しました. もちろん、ワニスがキャッシュする必要があることを要求します(そしてキャッシュする前に)。約 *100 以上。そのため、問題を修正しましたが、別の問題を作成しました。
cookie は (recv とバックエンド応答の両方で) 設定解除され、varnish をキャッシュに強制します。
unset beresp.http.set-cookie;
unset req.http.Cookie;
では、私の質問は... なぜパスのリクエストが多いのですか? どうすれば回避できますか?