PloneとVarnishのキャッシュ制御
公開Webサイトの場合、Varnishにて画像やCSSさらにはHTMLページのキャッシュをさせて、サイトのパフォーマンスを上げることがあります。
しかし、キャッシュ時間を長くすると、更新時の反映がスムーズにされないという問題が発生します。対処法としては、Varnishキャッシュのパージ(Purge)を行うことです。
今回はこのパージについて記事を書きます。
基本的な構成
nginx (Apache) -> Varnish -> Plone と構成を作り、Varnishにて画像やCSS、HTMLページを数時間又は1日以上キャッシュさせます。
nginx / Varnish のパフォーマンスはPlone (アプリケーションサーバとしてのZope) に比べて数十倍からそれ以上のアクセスに対応することができます。その為、Ploneは複数台設置し、Varnishにてキャッシュを持つことで、一般的なWebサイトは対応可能です。
しかし、キャッシュが残り続けることで、CMSでの更新時にスムーズに情報が公開されません。それを助けるのがパージです。
パージ(Purge)の仕組み
Varnishは、PURGEコマンドを受け付けることが可能です。当方で公開している、Varnish 4.0のサンプル設定ファイル(VCL)でも、PURGEを同一サーバから受け付けるようにしています。
内部のアプリケーションや手動コマンドにて、Varnishにパージの指示を与え、キャッシュを無効にし、新しい画像やHTMLページを取得します。
Ploneからパージ(Purge)する
Ploneは、VarnishへPURGEコマンドが出せる仕組みが有ります。
Ploneに標準で組み込まれている、 plone.app.caching にて、細かなキャッシュ設定やパージの設定を行うことが出来ます。
以下に設定方法を記します。
キャッシュプロキシの設定
以下は設定の抜粋です。
- パージングを有効にする: On
- キャッシングプロキシ: http://localhost:6081
- パージするコンテンツタイプ: 必要な物を選択する
- バーチャルホスト書き換えはキャッシングポリシーの前で起きる: On
- 外部に面しているドメイン: http://YOUR_DOMAIN:80
まとめ
Plone標準の機能を使い、キャッシュコントロールが可能になります。
更に一歩進んだ対応を行うこともあります。それは公開されたコンテンツ自身のキャッシュのパージだけではなく、ニュース公開時にTopページに表示される際の、Topページの対応です。CMSやサイト構造によって、コンテンツ公開時の影響範囲は変わってきます。これに対応させるために、サイト毎の独自のパッケージにて、Topページまでキャッシュのパージをするように指示をする仕組みも作っています。
ご興味があればお問合せ下さい。