Varnish: 特定の日付まですべてのコンテンツをキャッシュしますか?

Varnish: 特定の日付まですべてのコンテンツをキャッシュしますか?

設定した日付まで特定のパスの下にすべてを保存するように Varnish を構成する方法はありますか?

私のサイトは月に一度更新されるので、それまではキャッシュされたコンテンツを提供したいだけです。

答え1

ヘッダーフィールドを追加するだけ

Expires: Thu, 01 Dec 1994 16:00:00 GMT

すべての応答に、日付を月末に設定します。 Varnish はこのヘッダー フィールドを尊重する必要があります。 また、キャッシュを無効にする可能性のあるすべてのキャッシュ制御ヘッダー (max-age、no-cache など) を必ず削除してください。

答え2

Varnish 7.4 では、これを使用して、キャッシュされたすべてのコンテンツを明日の深夜 (簡単にするために GMT) に期限切れにします。

set beresp.ttl = (std.time(regsub(now, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")) + 1d - now);

機能:

  1. now文字列として使用された場合は、「Tue, 20 Feb 2018 09:30:31 GMT」のようなテキストに変換されます(ドキュメント
  2. regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")時刻部分を00:00:00に置き換えます。つまり今日の深夜です
  3. std.time(<#2>)時間をSTRING型からTIME型に変換し、時間計算に使用できるようにします。
  4. <#3> + 1d - now今日の真夜中を明日の真夜中に変換し、残りの秒数を計算して、beresp.ttl

まだテスト中ですが、真夜中の 2 時間前に最初にリクエストしたページに対して Age: 3872 が実際に表示されていますので、確信しています。

答え3

ttl を 30 日に設定すると、Varnish はまったく同じオブジェクトを 30 日間提供します。

関連情報