사용자 지정 헤더가 Dispatcher을 통과하지 않거나 캐싱 동작에 영향을 줌
페이지가 Dispatcher을 통해 제공되면 X-Robots-Tag, ETag 및 사용자 지정 캐시 헤더와 같은 사용자 지정 응답 헤더가 사라지거나, 레거시 Vary: User-Agent 지시문이 있으면 CDN 캐싱이 중단됩니다. Dispatcher은 해당 /cache/headers 및 /headers 구성에 명시적으로 나열된 응답 헤더만 전달하며, Apache는 AEM을 지연하라는 지시가 없는 한 일부 헤더(예: ETag)를 무시합니다. 팜 구성에서 헤더를 허용하고, Apache가 수정되지 않은 헤더를 전달하는지 확인하고, 기존 Vary: User-Agent 지시문을 제거하고, 캐시를 지우면 올바른 헤더 통과 및 캐싱이 복원됩니다.
설명 description
환경:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- AEM Managed Services (AMS)
- Adobe Experience Manager 온-프레미스 소프트웨어
- AEM Dispatcher(Apache) 및 CDN 계층
문제/증상:
curl -I이(가) 있는 AEM 게시에는 헤더가 표시되지만 Dispatcher에는 없습니다.- CDN이
Vary: User-Agent때문에 페이지를 캐싱하지 않습니다. - Dispatcher이 캐시를 무시하므로 쿼리 매개 변수(
?a=b)가 추가되는 경우에만 사용자 지정 헤더가 표시됩니다. ETag이(가) 손실되거나 수정되었습니다(예: Apache 추가-gzip).- 캐시된 헤더가 새로 고쳐지지 않으므로 Dispatcher에서 오래된 콘텐츠를 반환합니다.
근본 원인:
Dispatcher은 /cache/headers 및 /headers에 명시적으로 나열된 응답 헤더만 전달합니다. 헤더가 없으면 Dispatcher은 헤더를 삭제하거나 캐시된 헤더 메타데이터를 사용합니다. Apache는 AEM을 지연하도록 구성되지 않은 경우 헤더(예: ETag)를 재정의합니다. 일부 레거시 vhost 구성에는 Header append Vary User-Agent이(가) 포함되어 있습니다. 이 구성은 VARY 카디널리티가 너무 높아서 CDN 캐싱을 중단합니다. 쿼리 문자열 요청은 캐시를 무시하므로 누락된 헤더가 캐시된 경로에만 표시됩니다.
확인하는 방법
- Dispatcher 이전 또는 이후에 헤더가 누락되었는지 확인합니다. Publish 및 Dispatcher URL 모두에 대해
curl -I을(를) 실행하고 헤더 집합을 비교합니다. 헤더가 Publish에 표시되지만 Dispatcher에서 누락되거나 수정된 경우 Dispatcher 또는 Apache가 해당 헤더를 제거하고 있습니다. Publish에 이미 누락된 경우 먼저 AEM 코드를 수정합니다. - Dispatcher 캐시가 포함되었는지 확인합니다. 쿼리 매개 변수(
?a=b이(가) 있는 URL에 대해curl -I)를 사용하여 다시 테스트합니다. 헤더가 쿼리 매개 변수와만 표시되는 경우 리소스는 저장된 헤더 메타데이터 없이 캐시에서 제공됩니다.
해결 방법 resolution
다음 단계에 따라 문제를 해결하십시오.
-
팜 파일에서 캐싱을 위한 헤더를 허용합니다. 게시 팜
.any파일에서 헤더 이름을/cache/headers블록에 추가합니다(예:X-Robots-Tag,ETag또는Edge-Cache-Tag). 다시 시작 및 캐시 지우기 후curl -I을(를) 실행하고 헤더가 표시되는지 확인하십시오. -
Apache가 헤더를 덮어쓰지 않고 전달하는지 확인합니다. AMS 및 온프레미스의 경우 vhost를 편집합니다.
ETag에 대해FileETag None및Header unset ETag을(를) 추가합니다.- 사용자 지정 헤더의 경우
SetEnvIfNoCase X-Robots-Tag "(.+)$" X_ROBOTS_TAG=$1및Header always set X-Robots-Tag "%{X-Robots-Tag}e" env=X_ROBOTS_TAG을(를) 설정합니다.
apachectl -t을(를) 실행하고 서비스를 다시 시작한 다음 curl -I에서 헤더를 표시하는지 확인하십시오.
3. 팜 파일에서 전달할 헤더를 허용합니다(캐싱 안 함). 응답이 캐시되지 않은 경우에도 Dispatcher이 헤더를 클라이언트에 전달하도록 /headers 블록에 헤더를 추가한 다음 curl -I을(를) 확인합니다.
4. 기존 Vary: User-Agent 지시문을 제거합니다. grep -R "Vary User-Agent" .을(를) 사용하여 vhost 디렉터리를 검색하고 검색된 모든 인스턴스를 주석 처리하므로 CDN이 캐싱 응답을 다시 시작합니다.
5. 구성이 변경된 후 캐시를 지웁니다. AEMaaCS에서 Cloud Manager → 환경 → 캐시 지우기를 사용하십시오. AMS 또는 온-프레미스에서 <dispatcher_cache_path>에서 캐시된 파일을 제거하거나 활성화 플러시를 트리거한 다음 Apache를 다시 시작하십시오. curl -I에 올바른 헤더가 표시되는지 확인하십시오.
6. 도메인-팜 매핑의 유효성을 검사합니다. Dispatcher에서 헤더 규칙이 있는 올바른 게시 팜을 사용하도록 vhost에 요청된 도메인이 포함되어 있는지 확인합니다. Dispatcher 로그에서 호스트와 일치하는 팜이 없습니다. 일치하는 팜이 있으면 vhost ServerName 또는 ServerAlias에 도메인을 추가하고 다시 시도하십시오.
유효성 검사
- Dispatcher URL에 대해
curl -I을(를) 실행하고 헤더가 있고 Publish와 일치하는지 확인합니다. - 캐시된 메타데이터 파일(
<path>.headers)이 Dispatcher 캐시 디렉터리에 생성되었는지 확인합니다. - 의도하지 않은 헤더(예:
Vary: User-Agent)가 vhosts에 남아 있지 않은지 확인하고 변경 전후의 CDN 캐시 적중률을 확인합니다.