AEMでのCache-ControlとCDN/Dispatcherのキャッシュ設定の問題
AEM DispatcherやAkamaiなどのダウンストリーム CDNでは、意図しないキャッシュ動作が返されます。意図したTTLに一致しないCache-Control値、キャッシュされるダイナミックコンテンツの最初のバリエーションのみ、Cache-Control ヘッダーのないDynamic Media URL、無効化された後も保持される古い応答。 ログにエラーは表示されません。この問題は、HTTP応答ヘッダーまたは一貫性のないキャッシュ動作に表示されます。 CDNはアップストリームヘッダーを尊重し、これらのヘッダーが設定されていない場合は予測的にキャッシュしないため、原因はDispatcherまたはCDN レイヤーでCache-Control設定またはキャッシュキーロジックが正しくないか不足しています。 Dispatcherで明示的なキャッシュ制御ヘッダーを設定し、ダイナミックバリエーションのキャッシュキーを調整し、Dynamic Media アセットのルールセットを設定すると、正しく予測可能なキャッシュが復元されます。
説明 description
環境:
- Adobe Experience Manager as a Cloud Service
- Adobe Experience Manager Managed Services
- Adobe Experience Manager オンプレミス
- AEM DispatcherとApache HTTP Server
- FastlyやAkamaiなどのCDN レイヤー
- Dynamic Media (Scene7)
問題/症状:
max-ageやs-maxageなどのCache-Control値が、デフォルトのmax-age=300やmax-age=60, s-maxage=7200などの期待値と一致しません。- CDNは、動的にレンダリングされたコンテンツの最初のバリエーションのみをキャッシュします。
- Dynamic Media (Scene7)のURLは、Cache-Control ヘッダーを返しません。
- DispatcherまたはCDNは、予期された無効化の後でも、キャッシュされた応答を引き続き提供します。
- CDNまたはDispatcherをバイパスして、オリジン出力を表示することはできません。
根本原因:
根本原因は、DispatcherまたはCDN レイヤーでのCache-Control ヘッダーまたはキャッシュキーロジックの設定が正しくないか、設定が見つからない場合です。 FastlyやAkamaiなどのCDNは、アップストリームのCache-Control ヘッダーを尊重し、DispatcherのデフォルトはCDNのキャッシュ内容に影響します。そのため、ヘッダーが明示的に設定されていない場合、CDNは応答を予期せずキャッシュします。 キャッシュキーがユーザー固有の属性によって異なっていない場合、動的コンテンツがキャッシュされます。 Dynamic MediaとScene7では、Cache-Control ヘッダーを生成するにはルールセット設定が必要です。
確認方法
- ブラウザーまたはcurlを使用して、現在のCache-Control ヘッダーを確認します。
curl -I https://example.com/path/to/page.htmlを実行し、public, max-age=60, s-maxage=7200やmax-age=300などのCache-Control値を調べます。 本番環境で期待するものと一致することを確認します。 ヘッダーが完全に見つからない場合は、解像度に明示的な設定を適用します。 - CDNがURLだけでキャッシュするかどうかを確認します。 異なる動的出力を期待して、同じURLを2回要求します。 両方の応答が同じ場合、CDNまたはDispatcherは最初のバリエーションのみをキャッシュします。
- キャッシュをバイパスして、オリジン出力を確認します。 CDNとDispatcherをバイパスするために、クエリパラメーターを
https://example.com/page.html?q=123などのURLに追加します。 応答はオリジンのパブリッシャー出力を返し、キャッシュされた応答と比較できます。
解決策 resolution
問題を解決するには、次の手順に従います。
- Dispatcher設定でCache-Control値を設定します。 Cache-Control ヘッダーが定義されているルールを更新します。 AEM as a Cloud Serviceで、プロジェクトリポジトリでDispatcher コードを編集し、Cloud Managerを通じてデプロイします。 Managed Servicesおよびオンプレミスでは、サーバー上またはCloud Manager パイプライン経由でApacheおよびDispatcher設定を更新します。 デプロイメント後、
curl -Iをもう一度実行して、ヘッダーが更新されたTTLを反映することを確認します。 - 必要に応じて、動的バリエーションのキャッシュを設定します。 コンテンツがパラメーターによって異なる必要がある場合は、Dispatcher ルールで設定されたキャッシュキーに必要なクエリパラメーターまたはCookieを含めます。 異なるパラメーターを持つ複数のリクエストを送信し、CDNが異なる応答を返すことを確認します。
- Dynamic MediaおよびScene7 アセットのキャッシュ制御ヘッダーを設定します。 Dynamic MediaおよびScene7 ルールセットを使用して、必要な
max-age=N値でCache-Control ヘッダーを設定します。is/image/...などのDynamic Media URLでcurl -Iを実行し、Cache-Control ヘッダーが表示されることを確認します。 - キャッシュをクリアまたはバイパスして、結果を検証します。 設定が変更されたら、もう一度
curl -Iを実行し、Cache-Control ヘッダーが目的のTTLと一致することを確認します。 CDN デバッグヘッダーが使用可能な場合は、CDNが更新されたTTLを返すことを確認し、複数のユーザーまたはパラメーターに対してコンテンツをリクエストすることで、動的なバリエーションを確認します。
問題が解決しない場合
影響を受けるURLのcurl -I出力、Cache-Controlを制御するDispatcher設定スニペット、AkamaiやFastlyなどのCDN レイヤーの詳細、期待される動作と実際の動作の説明については、Adobe サポートにお問い合わせください。