Amazon CloudFront 배포에서 객체를 캐시하는 시간을 지정하고 싶어서 오리진에 Cache-Control 또는 Expires 헤더를 추가했습니다. 하지만 CloudFront가 지정한 시간 동안 객체를 캐싱하지 않거나 CloudFront가 전혀 캐싱하지 않습니다.
해결 방법
Cache-Control 또는 Expires 헤더에 설정한 디렉티브가 서로 충돌하지 않는지 확인합니다. Cache-Control max-age 지시문을 Expires 헤더 대신 사용하는 것이 가장 좋습니다. 두 값을 모두 지정하는 경우 CloudFront는 Cache-Control max-age에 대해 설정한 값만 사용합니다.
CloudFront 배포에 설정한 최소 TTL, 기본 TTL, 최대 TTL이 Cache-Control 또는 Expires 헤더와 충돌하지 않는지 확인하세요.
이러한 캐시 기간 설정이 서로 충돌하는 경우 CloudFront가 설정된 시간 동안 객체를 캐싱하지 않거나 CloudFront가 전혀 캐싱하지 않을 수 있습니다. 캐시 기간 설정이 서로 충돌하는 다음과 같은 예는 피하세요.
- 최대 TTL은 5분(300초)으로 설정되고 Cache-Control max-age 헤더는 1시간(3600초) 으로 설정됩니다. 이 경우 CloudFront는 객체를 1시간이 아닌 5분 동안 캐시합니다.
- Cache-Control max-age 헤더는 3시간으로 설정되고 Expires 헤더는 1개월로 설정됩니다. 이 경우 CloudFront는 객체를 1개월이 아닌 3시간 동안 캐싱합니다.
- 기본, 최소 및 최대 TTL은 0초로 설정되어 있습니다. 이 경우 CloudFront는 항상 오리진의 최신 콘텐츠가 있는지 확인합니다.
- 최소 TTL은 60초로 설정되고, 기본 TTL은 300초로 설정되며, 최대 TTL은 3600초로 설정되어 있습니다. 오리진에서 캐시 헤더(예: Cache-Control max-age 또는 Expires)를 제공하지 않는 경우 CloudFront는 기본 TTL 기간 동안 객체를 캐싱합니다.
**중요:**캐시 헤더로 오리진 자산을 업데이트하는 경우 CloudFront는 CloudFront가 오리진에 새 요청을 보낸 후에만 변경 사항을 반영합니다. CloudFront는 엣지 로케이션에서 캐시된 자산이 만료되면 오리진에 새로운 요청을 보냅니다. 그러면 배포가 자산에 대한 새 요청을 수신합니다. 캐시된 자산이 만료되도록 설정되기 전에 CloudFront에 업데이트가 반영되도록 하려면 캐시를 무효화하세요.
관련 정보
객체 캐싱
콘텐츠가 캐시에 보관되는 기간 관리(만료)
CloudFront에서 오류를 캐싱하는 기간 제어