Advanced Varnish

ESIサポート、コンテンツタイプごとのTTL設定、包括的なキャッシュ管理機能を備えた、Drupal向けの高度なVarnishキャッシュ統合を提供します。

adv_varnish
1,570 sites
36
drupal.org

インストール

Drupal 11, 10, 9 v4.0.13
composer require 'drupal/adv_varnish:^4.0'

概要

Advanced Varnishは、DrupalとVarnishリバースプロキシキャッシュサーバー間の深い統合を提供する包括的なキャッシュモジュールです。Edge Side Includes(ESI)技術により、匿名ユーザーと認証済みユーザーの両方に対して効率的なページキャッシングを実現します。

このモジュールにより、管理者はコンテンツタイプごとのTTL(Time To Live)値、異なるキャッシュ粒度レベル(ページごと、ロールごと、ユーザーごと)を持つブロックごとのESIキャッシング、高度なキャッシュ無効化メカニズムなど、詳細なキャッシュ設定を構成できます。タグ、URL、またはVarnishキャッシュ全体のフラッシュによってキャッシュを無効化できる組み込みのキャッシュパージャーが含まれています。

独自の機能として、大規模なコンテンツ更新時のキャッシュスタンピードを防ぐために、cronの実行を通じて段階的にキャッシュを無効化するDeflateキャッシュ機能があります。また、認証済みユーザー向けにESI経由でロードできるカスタムUser Blocksを作成するためのプラグインシステムも提供しており、キャッシュ可能なページを維持しながらパーソナライズされたコンテンツを実現します。

Features

  • 複数のVarnishサーバーをサポートする設定可能なサーバーエンドポイントによる完全なVarnishキャッシュ統合
  • キャッシュされたページ内で動的ブロックを配信するためのESI(Edge Side Includes)サポート
  • 異なるコンテンツタイプに異なるキャッシュ有効期間を設定できるコンテンツタイプごとのTTL設定
  • 3つのキャッシュ粒度レベルを持つブロックごとのESI設定:共有(ページごと)、ユーザーロールごと、ユーザーIDごと
  • キャッシュタグ、URLパターン、またはサイト全体のキャッシュフラッシュによるパージをサポートする組み込みキャッシュパージャー
  • キャッシュスタンピードを防ぐためのcron実行中の段階的なキャッシュ無効化を行うDeflateキャッシュ機能
  • ロールベースのキャッシュセグメンテーションによる認証済みユーザー向けのCookieベースのキャッシュビニング
  • カスタムのESIロードされるユーザー固有のコンテンツブロックを作成するためのUserBlocksプラグインシステム
  • バックエンドが利用できない場合に古いコンテンツを配信するためのグレース期間設定
  • 匿名ユーザーと認証済みユーザー向けのパスパターンごとのカスタムCache-Controlヘッダールール
  • 特定のパスまたはドメインのキャッシングを無効にするURL除外パターン
  • 詳細なログ記録とキャッシュデバッグヘッダーを含むデバッグモード
  • Drupalのキャッシュタグシステムとの自動キャッシュタグ無効化統合
  • Drupalメンテナンスモード中のキャッシュパージ防止のサポート

Use Cases

パーソナライズされたコンテンツを持つ高トラフィックニュースサイト

ニュースウェブサイトは毎日数百万のページビューを受けています。ESIサポート付きのAdvanced Varnishを使用することで、サイトはメインの記事コンテンツをキャッシュしながら、ユーザー固有の要素(ウェルカムメッセージ、閲覧履歴、サブスクリプションステータスなど)をESI経由で動的にロードできます。これにより、パーソナライゼーションを提供しながらほぼ瞬時のページロードを実現します。

ショッピングカートを持つECサイト

ECサイトは商品ページをキャッシュする必要がありますが、ログインユーザーにはショッピングカートの数を表示する必要があります。UserBlocksプラグインシステムを使用して、ESI経由でカート数を挿入するカスタムプラグインを作成できます。商品ページは完全にキャッシュされたまま、カート情報はユーザーごとに個別にロードされます。

様々なコンテンツタイプを持つマルチサイトデプロイメント

Drupalマルチサイトインストールには、更新頻度が異なる異なるコンテンツタイプがあります。コンテンツタイプごとのTTL設定を使用して、ニュース記事は15分のキャッシュ、ランディングページは24時間のキャッシュを設定できます。これにより、タイムリーなコンテンツ更新を確保しながらキャッシュヒット率を最適化します。

コンテンツ移行中の段階的なキャッシュ更新

大規模なコンテンツ移行や一括更新を実行する際、Deflate機能を使用して複数のcron実行にわたって段階的にキャッシュを無効化できます。これにより、すべてのページが突然キャッシュされなくなりバックエンドに過負荷がかかるキャッシュスタンピードを防ぎます。

開発およびステージング環境

「bypass advanced varnish cache」権限を使用して、開発者とコンテンツエディターは開発中にキャッシュされていないコンテンツを見ることができ、本番ユーザーは引き続きキャッシュされたページを受け取ります。また、デバッグモードを有効にしてキャッシュヘッダーを検査することもできます。

Tips

  • 本番環境にデプロイする前に、必ずステージング環境でVarnish VCL設定をテストしてください。
  • 開発中はデバッグモードを使用して、レスポンスのキャッシュヘッダー(X-Adv-Varnish、X-Cache-Debug)を確認してください。
  • Deflate機能は大規模なコンテンツ更新に便利です - キャッシュスタンピードによるバックエンドの過負荷を防ぐために段階的にキャッシュを無効化します。
  • コンテンツタイプの更新頻度と重要性に基づいて、異なるTTL値を使用することを検討してください。
  • 「ハッシュノイズ」と「シークレット」の値は自動生成されますが、変更できます。ハッシュノイズを変更すると、すべてのユーザーキャッシュビンが無効になります。
  • カスタムUserBlocksプラグインを作成する際は、関連するエンティティが変更されたときにコンテンツが無効化されるように適切なキャッシュタグを含めることを忘れないでください。
  • モジュールは複数のVarnishサーバーをサポートしています - 設定でサーバーホストをスペースで区切ってください。
  • 「bypass advanced varnish cache」権限は控えめに使用してください。この権限を持つユーザーは常にDrupalバックエンドにヒットします。

Technical Details

Admin Pages 3
Advanced Varnish cache設定 /admin/config/development/adv_varnish

Advanced Varnishモジュールのメイン設定ページで、キャッシング動作、サーバー設定、各種オプションを構成できます。

Varnishキャッシュのクリア(手動パージ) /admin/config/development/adv_varnish/clear_cache

タグ、URL、またはサイト全体のキャッシュフラッシュによってVarnishキャッシュを手動でパージします。組み込みVarnishパージャーが有効な場合にのみ利用可能です。

Varnishキャッシュのデフレート /admin/config/development/adv_varnish/deflate

キャッシュスタンピードを防ぐために、複数のcron実行にわたってVarnishキャッシュを段階的に無効化します。組み込みVarnishパージャーが有効な場合にのみ利用可能です。

権限 2
Varnishキャッシュをバイパス

この権限が設定されているユーザーロールにはVarnishが使用されません。Varnishキャッシュが無視されるため、そのようなユーザーのパフォーマンスに影響する可能性があります。

Advanced Varnish設定の構成

この権限により、Advanced Varnish cache設定ページへのアクセスが許可されます。制限付きアクセス権限です。

Hooks 1
hook_adv_varnish_user_blocks_info_alter

モジュールがUserBlocksプラグインの定義を変更できるようにします。

Troubleshooting 5
コンテンツ更新時にキャッシュが無効化されない

組み込みVarnishパージャーが有効で、Varnishサーバーホストが正しく設定されていることを確認してください。Varnish VCLが設定されたシークレットと一致するX-Varnish-Purgeヘッダー付きのBANリクエストを受け入れるように設定されていることを確認してください。モジュール設定でログを有効にし、パージリクエストの詳細についてwatchdogログを確認してください。

ESIブロックがコンテンツではなくHTMLコメントとして表示される

Varnish VCLがESIを処理するように設定されていることを確認してください。クライアントは'Surrogate-Capability: abc=ESI/1.0'ヘッダーを送信する必要があり、VarnishはESI includeを処理するように設定されている必要があります。また、モジュール設定で「Varnish ESIサポートを有効にする」がチェックされていることを確認してください。

認証済みユーザーが他のユーザーのキャッシュコンテンツを見ている

これは通常、VCL設定の問題を示しています。Varnish VCLがX-Binヘッダーでキャッシュを変更し、ADVBIN Cookieを適切に処理することを確認してください。モジュールはロールベースのキャッシュビニングを使用するため、同じロールを持つユーザーは同じキャッシュコンテンツを見るはずです。

匿名ユーザーでページが無限にリダイレクトする

リダイレクト設定で「更新後にCookieが空の場合のリダイレクトを防止」を有効にしてください。これにより、Cookieをサポートしないクライアント(検索エンジンなど)のリダイレクトループを防ぎます。

メンテナンスモード中にキャッシュパージリクエストが失敗する

メンテナンス中にキャッシュをパージする必要がある場合は、一般設定で「メンテナンスモード中のVarnishパージを防止」のチェックを外してください。そうでなければ、これはデプロイ中にページをキャッシュしたままにするための期待される動作です。

Security Notes 4
  • 「administer advanced varnish configuration」権限は制限付きアクセスとしてマークされており、信頼できる管理者にのみ付与すべきです。
  • Varnishシークレットヘッダー(X-Varnish-Purge)は安全に保管し、Varnish VCLはBANリクエストを受け入れる前にこのヘッダーを検証する必要があります。
  • Cookieハッシュはセキュリティのために設定されたノイズとDrupalのハッシュソルトの両方を使用したHMAC-SHA256を使用します。
  • 外部ソースからの不正なキャッシュパージを防ぐために、Varnish VCLがシークレットヘッダーを適切に検証することを確認してください。