logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

キャッシュタグ + Varnish

30/04/2020, by maria

Varnish Cacheは、キャッシングリバースHTTPプロキシとしても知られるWebアプリケーションアクセラレータです。Varnishは、ページ読み込みのパフォーマンスを10〜1000倍に向上させるために何千ものDrupalサイトで使用されており、キャッシュタグと組み合わせてキャッシュの無効化を簡素化できます。

基本的なキャッシュタグ統合では、VarnishがDrupalによって生成されたキャッシュタグと正しく連携することを確認するために、3つのことを行う必要があります:

  • Varnish VCLを更新して、BANリクエストを正しく処理します。
  • ページのすべてのキャッシュタグのスペース区切りリストを含むキャッシュタグヘッダー(例:X-Cache-Tags)を各リクエストで送信します。
  • コンテンツまたは設定が更新されるたびに、関連するキャッシュタグを含むBANリクエストを送信し、一致するキャッシュタグを持つページの有効期限が切れるようにします。

Varnish VCLの更新

Symfony FOSHttpCacheパッケージには、キャッシュタグをサポートするために必要なVCL変更に関する優れたドキュメントがありますが、ここでは開始するための最小限のVCL変更を示します(Varnish 4.x用):

vcl_recv内:

sub vcl_recv {
    ...
    # Only allow BAN requests from IP addresses in the 'purge' ACL.
    if (req.method == "BAN") {
        # Same ACL check as above:
        if (!client.ip ~ purge) {
            return (synth(403, "Not allowed."));
        }

        # Logic for the ban, using the X-Cache-Tags header.
        if (req.http.X-Cache-Tags) {
            ban("obj.http.X-Cache-Tags ~ " + req.http.X-Cache-Tags);
        }
        else {
            return (synth(403, "X-Cache-Tags header missing."));
        }

        # Throw a synthetic page so the request won't go to the backend.
        return (synth(200, "Ban added."));
    }
}

vcl_backend_response内:

sub vcl_backend_response {
    # Set ban-lurker friendly custom headers.
    set beresp.http.X-Url = bereq.url;
    set beresp.http.X-Host = bereq.http.host;
    ...
}

vcl_deliver内:

sub vcl_deliver {
    # Remove ban-lurker friendly custom headers when delivering to client.
    unset resp.http.X-Url;
    unset resp.http.X-Host;
    # Comment these for easier Drupal cache tag debugging in development.
    unset resp.http.X-Cache-Tags;
    unset resp.http.X-Cache-Contexts;
    ...
}

VCLに必要な変更を加えたら、必ずVarnishを再起動してください!

キャッシュヘッダーを送信する

次のモジュールのいずれかを有効にして、Drupalにキャッシュタグを含むHTTPヘッダーを出力させることができます:

プロジェクト モジュール ヘッダー
Varnish Purger Varnish Purger Tags (varnish_purge_tags) Cache-Tags
Generic HTTP Purger 汎用HTTPタグヘッダー (purge_purger_http_tagsheader) Purge-Cache-Tags

 

8.x-3.0-beta5より前の一部のバージョンでは、PurgeモジュールがPurge-Cache-Tagsヘッダーを自動的に設定していましたが、代わりにサブモジュールが責任を負うべきであると決定されたため、削除されました。

コンテンツまたは設定の変更時にBANリクエストを送信する

Generic HTTP Purgerモジュールを使用すると、Purge設定ページ(admin/config/development/performance/purge)に移動してHTTP Purgerを追加できます。

Varnishサーバーの詳細(ホスト名、ポート、パスなど)を入力し、「ヘッダー」設定で次の設定のヘッダーを入力します:

  • ヘッダー:X-Cache-Tags
  • 値:[invalidation:expression]

このパージ設定を保存し、パージキューを処理するcronジョブを設定すると(drush p-queue-work)、パージキューがBANを発行するとすぐにVarnishがページをBANし始めるはずです!

このドキュメントの一部の注記は、次のソースから適応されています: