バージョン管理された複数のサーバーの前で Varnish を使用する

バージョン管理された複数のサーバーの前で Varnish を使用する

私は複数のウェブサーバーの前にVarnishを置いています。それらをVarnishのネイティブとして実行することも、nginxを介してアップストリームチェックを通じて実行することもできますが、静的コンテンツのみがキャッシュされます(当然のことですが)。また、クエリ文字列も尊重されます。

/main.css?v=1/main.css?=v2別々にキャッシュされる

サーバーを 1 台ずつ更新しますが、実際のところ、一般的な展開では、ダウンタイムなしでこれらすべてを同時に実行することはできません。

main.css更新された場合1つバックエンドで、新しい Web ページのバージョンに従って varnish にリクエストを送信します。/main.css?=v2マシン上で、main.cssまだ更新されていない古いバージョンのファイルが検索される可能性があります。そのため、キャッシュ内の v1 が v2 として取得され、TTL が期限切れにならない限り (遅すぎます)、何もできません。

リクエストを介して手動でキャッシュを無効にすることもできます。問題ありません。

手動で干渉せずにソフトウェアを書き換えて Varnish にフィードバックする自動化ソリューションはありますか? たとえば、次のとおりです。

  1. プローブが正常になった後、バックエンドが起動したときにキャッシュを期限切れにすることは可能ですか?
  2. 他に何か?

ありがとう

答え1

このコードをロードするか、varnish バージョンに合わせて調整すると、パージする項目に一致するリクエスト URL を含む PURGE タイプのリクエストを送信して、varnish キャッシュから項目を消去できます。これを使用すると、基本的に、cURL コマンドなどを使用して、Varnish サーバーに対するデプロイメント プロセスの最後に選択的にパージすることを自動化できます。

https://github.com/dreamhost/varnish-vcl-collection/blob/master/lib/purge.vcl

関連情報