Pantheon Advanced Page Cache

DrupalのCache metadata(キャッシュメタデータ)とPantheon Global CDNを接続し、Drupalのcache tagsシステムに基づいた自動エッジキャッシュ無効化を実現するブリッジモジュール。

pantheon_advanced_page_cache
28,288 sites
21
drupal.org

インストール

Drupal 11, 10, 9 v2.3.4
composer require 'drupal/pantheon_advanced_page_cache:^2.3'

概要

Pantheon Advanced Page Cacheモジュールは、Drupalの堅牢なcache metadataシステムをPantheonのGlobal CDNインフラストラクチャに接続します。有効化すると、Drupalの内部cache tagsを、Pantheon CDNが理解できるHTTP Surrogate-Keyヘッダーに自動的に変換します。

これにより、エッジでのインテリジェントできめ細かなキャッシュ無効化が可能になります。Drupalで基礎データが変更された場合(Nodeの更新、Taxonomy Termの変更、ユーザー権限の変更など)、キャッシュ全体をパージするのではなく、関連するキャッシュページのみがCDNからクリアされます。

このモジュールは基本的な動作に設定は不要です。Pantheonでホストされているサイトで有効化するだけで、Drupal 8以降が既に提供しているcache metadataを活用して、すぐに動作を開始します。このゼロコンフィグアプローチは、コンテンツの鮮度を確保しながらキャッシュヒット率を最大化するのに最適です。

Features

  • Drupalのcache tagsをPantheon Global CDN統合用のSurrogate-Key HTTPヘッダーに自動変換
  • きめ細かなエッジキャッシュ無効化を実現 - コンテンツ変更時に影響を受けたページのみがパージされる
  • 設定不要 - Pantheonでホストされたサイトにインストールすると即座に動作
  • 過度に長いヘッダーによる502エラーを防ぐため、25KBのヘッダーサイズ制限を適用
  • cache tag制限を超えた場合に警告をログ出力し、管理者が最適化の機会を特定できるよう支援
  • 設定によりリストタグ処理のレガシー動作をオプションでサポート
  • DrupalのCache APIおよびcache tag無効化システムとシームレスに統合

Use Cases

高トラフィックニュースサイト

Pantheonでホストされているニュースサイトでこのモジュールを有効化すると、記事がグローバルにエッジCDNから配信されながら、編集者がコンテンツを更新した際には即座にパージされます。記事が編集されると、その特定の記事のキャッシュページのみが無効化され、キャッシュ全体ではありません。

Eコマース商品カタログ

Eコマースサイトはインテリジェントなキャッシュ無効化の恩恵を受けます。商品の価格や在庫が変更されると、その商品を表示しているすべてのページがCDNから自動的にパージされ、無関係なページは最適なパフォーマンスのためにキャッシュされたままになります。

コンテンツ一覧ページ

新しい記事が公開されると、フロントページやカテゴリページなどの一覧ページが自動的にパージされます(デフォルト設定の場合)。これにより、手動でキャッシュをクリアすることなく、訪問者は常に最新のコンテンツを見ることができます。

ユーザー権限の変更

ユーザー権限やロールが変更されると、影響を受けるキャッシュページが自動的に無効化され、ユーザーは常にアクセスレベルに適したコンテンツを見ることができます。

Tips

  • Pantheon-Debug:1ヘッダー付きのcurlを使用してSurrogate-Key-Rawヘッダーを確認: curl -IH 'Pantheon-Debug:1' https://your-site.pantheonsite.io/
  • 多くのEntityをレンダリングするページはヘッダー制限を超える可能性があります - カスタムevent subscriberを使用してcache tagsをフィルタリングすることを検討してください
  • 新規インストールでは推奨設定が自動的に使用されます - 1.xからアップグレードするサイトのみ設定変更が必要です
  • モジュールはDrupal組み込みのcache metadataで自動的に動作します - ほとんどの場合コード変更は不要です
  • Views生成のcache tagsを細かく制御するにはViews Custom Cache Tagsと組み合わせてください
  • /admin/reports/dblogでヘッダーサイズ制限に達した際の警告メッセージを確認してください

Technical Details

Drush Commands 1
drush config:set pantheon_advanced_page_cache.settings override_list_tags false

リストタグオーバーライド動作を無効化(1.xからアップグレードするサイトに推奨)

Troubleshooting 5
多くのEntityを持つページで502エラーが発生する

Surrogate-Keyヘッダーがサイズ制限を超えている可能性があります。モジュールはヘッダーを25KBに制限しますが、他のヘッダーと合わせるとnginxの32KB制限を超える可能性があります。Drupalログで警告メッセージを確認してください。冗長なcache tagsをフィルタリングするために、カスタムコードやViews Custom Cache Tagsモジュールの使用を検討してください。

cache tagsがトリミングされているという警告メッセージ

ページが数千のEntityをレンダリングしていることを示しています。モジュールのsubscriberよりも高い優先度(priority > 0)でカスタムevent subscriberを作成し、ヘッダーに追加される前に不要なcache tagsをフィルタリングしてください。実装例についてはテストモジュールを参照してください。

新しいコンテンツが追加されてもリストページがクリアされない(1.xからアップグレード後)

次のコマンドを実行: drush config:set pantheon_advanced_page_cache.settings --input-format=yaml override_list_tags false - または、モジュールをアンインストールして再インストールし、新しいデフォルト動作を取得してください。

ブラウザでSurrogate-Keyヘッダーを確認できない

Pantheonはクライアントにレスポンスを送信する前にSurrogate-Keyヘッダーを削除します。デバッグヘッダー付きのcurlを使用して生のヘッダーを表示してください: curl -IH 'Pantheon-Debug:1' https://your-site.pantheonsite.io/

モジュールが何も動作していないように見える

モジュールはpantheon_clear_edge_keys()関数が利用可能なPantheonでホストされたサイトでのみ機能します。Pantheon以外のホスティングでは、モジュールは何も動作しません。

Security Notes 3
  • このモジュールはDrupal Security Teamから「covered」セキュリティアドバイザリカバレッジを受けています
  • 機密データは公開されません - Surrogate-Keyヘッダーにはcache tag識別子のみが含まれます
  • モジュールはDrupalの既存のcache tagシステムに依存しており、新しい攻撃ベクトルは導入されません