Amazon CloudFront 배포가 객체를 캐싱하는 시간을 지정하려고 Cache-Control 또는 Expires 헤더를 오리진에 추가했습니다. 그런데 CloudFront가 지정한 시간 동안 객체를 캐싱하지 않거나 전혀 캐싱하지 않습니다. 이유가 무엇입니까?
해결 방법
Cache-Control 또는 Expires 헤더에서 설정한 명령이 서로 충돌하지 않는지 확인합니다. 모범 사례는, Expires 헤더 대신, Cache-Control max-age 명령을 사용하는 것입니다. 둘 다에 값을 지정한 경우 CloudFront는 Cache-Control max-age에 대해 설정한 값만 사용합니다.
또한, CloudFront 배포에서 설정한 최소 TTL(Minimum TTL), 기본 TTL(Default TTL) 및 최대 TTL(Maximum TTL)이 Cache-Control 또는 Expires 헤더와 충돌하지 않는지 확인합니다.
이러한 캐시 기간 설정이 서로 충돌하는 경우 CloudFront가 설정된 시간 동안에 객체를 캐싱하지 않거나 CloudFront가 전혀 캐싱하지 않을 수 있습니다. 다음과 같이 캐시 기간 설정이 서로 충돌하는 예는 피합니다.
- Maximum TTL(최대 TTL)을 5분(300초)으로 설정하고 Cache-Control max-age 헤더를 1시간(3600초)으로 설정하면 CloudFront는 1시간이 아니라, 5분 동안 객체를 캐싱합니다.
- Cache-Control max-age 헤더를 3시간으로 설정하고 Expires 헤더를 1개월로 설정하면 CloudFront는 1개월이 아니라, 3시간 동안 객체를 캐싱합니다.
- 기본 TTL(Default TTL), 최소 TTL(Minimum TTL) 및 최대 TTL(Maximum TTL)을 0초로 설정하면 CloudFront는 항상 오리진에서 최근 콘텐츠를 검색합니다.
중요: 캐싱 헤더에서 오리진 자산을 업데이트하는 경우 CloudFront가 오리진에 대한 새 요청을 생성한 후에만 CloudFront는 변경 사항을 반영합니다. CloudFront는 엣지 위치에서 캐싱된 자산이 만료되면 오리진에 대한 새 요청을 생성합니다. 그리고 배포에서는 자산에 대한 새 요청을 수신합니다. 캐싱된 자산을 만료하도록 설정하기 전에 CloudFront에서 업데이트를 강제로 반영하려면 캐시를 무효화합니다.
관련 정보
객체 캐싱