Varnish はすべてのリクエストをバックエンドに送信します。つまり、他のリクエストをキューに入れず、バックエンド リクエストを 1 つだけ発行し、そのレスポンスをすべてに使用します。
ただし、Varnish には猶予オプションがあり、このような状況で期限切れの古いコンテンツをキャッシュに保持できます。
たとえば、次の VCL を考えてみましょう。
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 5m;
} else {
set req.grace = 24h;
}
}
sub vcl_fetch {
set beresp.grace = 24h;
}
バックエンドが正常で (バックエンド ポーリングを参照)、リクエストの結果が であるMISS
場合、最初のリクエストがバックエンドに送信されます。同じコンテンツに対する別のリクエストが来ても、キャッシュ内に経過時間 <TTL+req.grace (この場合は 5 分) のアイテムがある場合、そのリクエストは代わりに「古い」コンテンツを取得します。これは、最初のリクエストがMISS
バックエンドからレスポンスを取得する (そしてキャッシュが再び新鮮になる) か、アイテムの経過時間が TTL+req.grace より大きくなる限り発生します。
バックエンドがダウンしている場合 (req.backend.healthy == FALSE)、age<TTL+24h である限り、古いコンテンツが提供されます。
より詳細な例と演習については、 Varnish ブックの「リクエストを保存する」セクションも参照してください。
修正済み:エスケープされていない < 文字。
さらに修正:別のエスケープされていない < 文字がありました...