AEM中的缓存控制和CDN/Dispatcher缓存配置问题
AEM Dispatcher和下游CDN(例如Fastly和Akamai)返回意外的缓存行为:与预期TTL不匹配的Cache-Control值、仅缓存动态内容的第一个变量、没有Cache-Control标头的Dynamic Media URL,以及失效后持续存在的陈旧响应。 日志中未显示错误 — 该问题显示在HTTP响应标头或缓存行为不一致中。 原因不正确或缺少Dispatcher或CDN层的Cache-Control配置或缓存键逻辑,因为CDN遵循上游标头,并且在未设置这些标头时无法预测地缓存。 在Dispatcher中配置显式Cache-Control标头,调整Dynamic Media资产的缓存键值,以及设置Dynamic Media资产的规则集,可恢复正确、可预测的缓存。
描述 description
环境:
- Adobe Experience Manager as a Cloud Service
- Adobe Experience Manager Managed Services
- Adobe Experience Manager内部部署
- AEM Dispatcher和Apache HTTP Server
- CDN层,例如Fastly和Akamai
- Dynamic Media (Scene7)
问题/症状:
- Cache-Control值(如
max-age或s-maxage)与预期值(如max-age=300或max-age=60, s-maxage=7200的默认值)不匹配。 - CDN仅缓存动态呈现内容的第一个变量。
- Dynamic Media (Scene7) URL未返回Cache-Control标头。
- Dispatcher或CDN会持续提供缓存的响应,即使是在预期失效后。
- 您无法绕过CDN或Dispatcher查看原始输出。
根本原因:
根本原因不正确或缺少在Dispatcher或CDN层的Cache-Control标头或cache-key逻辑配置。 Fastly和Akamai等CDN采用上游缓存控制标头,而Dispatcher默认设置会影响CDN缓存的内容,因此当未明确配置标头时,CDN缓存会意外响应。 当缓存键不因用户特定的属性而变化时,将缓存动态内容。 Dynamic Media和Scene7需要规则集配置才能生成Cache-Control标头。
如何确认
- 从浏览器或使用curl检查当前Cache-Control标头。 运行
curl -I https://example.com/path/to/page.html并检查Cache-Control值,如public, max-age=60, s-maxage=7200或max-age=300。 确认它符合您在生产中的预期。 如果标头完全缺失,请在解决方法中应用显式配置。 - 检查CDN是否仅按URL进行缓存。 请求同一URL两次,预期不同的动态输出。 如果两个响应相同,则CDN或Dispatcher将仅缓存第一个变量。
- 绕过缓存以查看原始输出。 将查询参数(如
https://example.com/page.html?q=123)附加到URL以绕过CDN和Dispatcher。 响应将返回原始发布者输出,您可以将其与缓存的响应进行比较。
解决方法 resolution
请按照以下步骤解决问题:
- 在Dispatcher配置中设置Cache-Control值。 更新定义Cache-Control标头的规则。 在AEM as a Cloud Service上,编辑项目存储库中的Dispatcher代码,并通过Cloud Manager进行部署。 在Managed Services和内部部署中,更新服务器上或通过Cloud Manager管道的Apache和Dispatcher配置。 部署后,再次运行
curl -I以确认标头反映更新的TTL。 - 在适当时配置动态变体的缓存。 如果内容因参数而异,请将所需的查询参数或Cookie包含在缓存键中,此缓存键可在Dispatcher规则中进行配置。 使用不同的参数发送多个请求,并确认CDN返回不同的响应。
- 为Dynamic Media和Scene7资源设置Cache-Control标头。 使用Dynamic Media和Scene7规则集通过所需的
max-age=N值设置Cache-Control标头。 在Dynamic Media URL (如is/image/...)上运行curl -I,并验证是否显示Cache-Control标头。 - 清除或绕过缓存以验证结果。 配置更改后,再次运行
curl -I并确认Cache-Control标头与所需的TTL匹配。 在有CDN调试标头可用的情况下,验证CDN是否返回更新的TTL,并通过请求多个用户或参数的内容来确认动态变体。
如果问题仍然存在
请联系Adobe支持团队,向其提供受影响的URL的curl -I输出、控制Cache-Control的Dispatcher配置片段、CDN层详细信息(如Akamai或Fastly)以及预期行为与实际行为的描述。
相关阅读
recommendation-more-help
experience-cloud-kcs-help-kbarticles