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-ages-maxageなどのCache-Control値が、デフォルトのmax-age=300max-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 ヘッダーを生成するにはルールセット設定が必要です。

確認方法

  1. ブラウザーまたはcurlを使用して、現在のCache-Control ヘッダーを確認します。 curl -I https://example.com/path/to/page.htmlを実行し、public, max-age=60, s-maxage=7200max-age=300などのCache-Control値を調べます。 本番環境で期待するものと一致することを確認します。 ヘッダーが完全に見つからない場合は、解像度に明示的な設定を適用します。
  2. CDNがURLだけでキャッシュするかどうかを確認します。 異なる動的出力を期待して、同じURLを2回要求します。 両方の応答が同じ場合、CDNまたはDispatcherは最初のバリエーションのみをキャッシュします。
  3. キャッシュをバイパスして、オリジン出力を確認します。 CDNとDispatcherをバイパスするために、クエリパラメーターをhttps://example.com/page.html?q=123などのURLに追加します。 応答はオリジンのパブリッシャー出力を返し、キャッシュされた応答と比較できます。

解決策 resolution

問題を解決するには、次の手順に従います。

  1. Dispatcher設定でCache-Control値を設定します。 Cache-Control ヘッダーが定義されているルールを更新します。 AEM as a Cloud Serviceで、プロジェクトリポジトリでDispatcher コードを編集し、Cloud Managerを通じてデプロイします。 Managed Servicesおよびオンプレミスでは、サーバー上またはCloud Manager パイプライン経由でApacheおよびDispatcher設定を更新します。 デプロイメント後、curl -Iをもう一度実行して、ヘッダーが更新されたTTLを反映することを確認します。
  2. 必要に応じて、動的バリエーションのキャッシュを設定します。 コンテンツがパラメーターによって異なる必要がある場合は、Dispatcher ルールで設定されたキャッシュキーに必要なクエリパラメーターまたはCookieを含めます。 異なるパラメーターを持つ複数のリクエストを送信し、CDNが異なる応答を返すことを確認します。
  3. Dynamic MediaおよびScene7 アセットのキャッシュ制御ヘッダーを設定します。 Dynamic MediaおよびScene7 ルールセットを使用して、必要なmax-age=N値でCache-Control ヘッダーを設定します。 is/image/...などのDynamic Media URLでcurl -Iを実行し、Cache-Control ヘッダーが表示されることを確認します。
  4. キャッシュをクリアまたはバイパスして、結果を検証します。 設定が変更されたら、もう一度curl -Iを実行し、Cache-Control ヘッダーが目的のTTLと一致することを確認します。 CDN デバッグヘッダーが使用可能な場合は、CDNが更新されたTTLを返すことを確認し、複数のユーザーまたはパラメーターに対してコンテンツをリクエストすることで、動的なバリエーションを確認します。

問題が解決しない場合

影響を受けるURLのcurl -I出力、Cache-Controlを制御するDispatcher設定スニペット、AkamaiやFastlyなどのCDN レイヤーの詳細、期待される動作と実際の動作の説明については、Adobe サポートにお問い合わせください。

関連トピックス

recommendation-more-help
experience-cloud-kcs-help-kbarticles