AEM의 캐시 제어 및 CDN/Dispatcher 캐싱 구성 문제
Fastly 및 Akamai와 같은 AEM Dispatcher 및 다운스트림 CDN은 예기치 않은 캐싱 비헤이비어를 반환합니다. 캐시 제어 값은 의도한 TTL과 일치하지 않고, 캐시되는 다이내믹 콘텐츠의 첫 번째 변형만 해당하며, 캐시 제어 헤더가 없는 Dynamic Media URL과, 무효화된 후 지속되는 오래된 응답이 반환됩니다. 로그에 오류가 표시되지 않습니다. HTTP 응답 헤더 또는 일관되지 않은 캐시 동작에 문제가 표시됩니다. CDN은 업스트림 헤더를 준수하며 해당 헤더가 설정되지 않은 경우 예상대로 캐시하지 않기 때문에 Dispatcher 또는 CDN 계층에서 캐시 제어 구성 또는 캐시 키 논리가 잘못되었거나 누락되었습니다. Dispatcher에서 명시적 캐시 제어 헤더를 구성하고, 동적 변형에 대한 캐시 키를 조정하고, Dynamic Media 자산에 대한 규칙 세트를 설정하면 정확하고 예측 가능한 캐싱이 복원됩니다.
설명 description
환경:
- Adobe Experience Manager as a Cloud Service
- Adobe Experience Manager Managed Services
- Adobe Experience Manager 온-프레미스
- AEM Dispatcher 및 Apache HTTP 서버
- Fastly 및 Akamai와 같은 CDN 계층
- Dynamic Media(Scene7)
문제/증상:
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 계층에서 캐시 제어 헤더 또는 캐시 키 논리의 구성이 잘못되었거나 누락되었습니다. Fastly 및 Akamai와 같은 CDN은 업스트림 캐시 제어 헤더를 처리합니다. Dispatcher 기본값은 CDN이 캐시하는 항목에 영향을 주므로 헤더가 명시적으로 구성되지 않은 경우 CDN이 예기치 않게 응답합니다. 캐시 키가 사용자별 속성에 따라 변경되지 않으면 동적 콘텐츠가 캐시됩니다. Dynamic Media 및 Scene7에서 캐시 제어 헤더를 생성하려면 규칙 세트 구성이 필요합니다.
확인하는 방법
- 브라우저나 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을 두 번 요청합니다. 두 응답이 동일한 경우 CDN 또는 Dispatcher은 첫 번째 변형만 캐싱합니다.
- 원본 출력을 보려면 캐시를 건너뜁니다. CDN 및 Dispatcher을 무시하려면 쿼리 매개 변수를 URL(예:
https://example.com/page.html?q=123)에 추가하십시오. 응답은 캐시된 응답과 비교할 수 있는 원본 게시자 출력을 반환합니다.
해결 방법 resolution
다음 단계에 따라 문제를 해결하십시오.
- Dispatcher 구성에서 Cache-Control 값을 설정합니다. Cache-Control 헤더가 정의된 규칙을 업데이트합니다. AEM as a Cloud Service에서 프로젝트 저장소에서 Dispatcher 코드를 편집하고 Cloud Manager을 통해 배포합니다. Managed Services 및 온프레미스에서 서버 또는 Cloud Manager 파이프라인을 통해 Apache 및 Dispatcher 구성을 업데이트합니다. 배포 후
curl -I을(를) 다시 실행하여 헤더가 업데이트된 TTL을 반영하는지 확인하십시오. - 해당되는 경우 동적 변형의 캐싱을 구성합니다. 콘텐츠가 매개 변수에 따라 달라야 하는 경우, Dispatcher 규칙에 구성된 캐시 키에 필수 쿼리 매개 변수 또는 쿠키를 포함하십시오. 다른 매개 변수를 사용하여 여러 요청을 보내고 CDN이 고유한 응답을 반환하는지 확인합니다.
- Dynamic Media 및 Scene7 자산에 대한 캐시 제어 헤더를 설정합니다. Dynamic Media 및 Scene7 규칙 세트를 사용하여 Cache-Control 헤더를 원하는
max-age=N값으로 설정합니다.is/image/...과(와) 같은 Dynamic Media URL에서curl -I을(를) 실행하고 Cache-Control 헤더가 표시되는지 확인하십시오. - 캐시를 지우거나 무시하여 결과를 확인합니다. 구성을 변경한 후
curl -I을(를) 다시 실행하고 Cache-Control 헤더가 원하는 TTL과 일치하는지 확인하십시오. CDN 디버그 헤더를 사용할 수 있는 경우 CDN이 업데이트된 TTL을 반환하는지 확인하고 여러 사용자 또는 매개 변수에 대한 콘텐츠를 요청하여 동적 변형을 확인합니다.
문제가 지속되는 경우
영향을 받는 URL의 curl -I 출력, 캐시 제어를 제어하는 Dispatcher 구성 조각, Akamai 또는 Fastly와 같은 CDN 계층 세부 정보 및 예상 동작과 실제 동작에 대한 설명을 사용하여 Adobe 지원 센터에 문의하십시오.