CloudFront에서 오리진의 HTTP 4xx 및 5xx 상태 코드를 처리 및 캐싱하는 방법 - Amazon CloudFront

CloudFront에서 오리진의 HTTP 4xx 및 5xx 상태 코드를 처리 및 캐싱하는 방법

CloudFront가 Amazon S3 버킷 또는 사용자 지정 오리진 서버에서 객체를 요청할 때, 오리진에서 오류가 발생했음을 나타내는 HTTP 4xx 또는 5xx 상태 코드를 반환하는 경우가 있습니다. CloudFront 동작은 다음에 따라 달라집니다.

  • 사용자 지정 오류 페이지를 구성했는지 여부

  • CloudFront에서 오리진으로부터 오류 응답을 캐싱하려는 시간(오류 캐싱 최소 TTL)을 구성했는지 여부

  • 상태 코드

  • 5xx 상태 코드의 경우 요청된 객체가 현재 CloudFront 엣지 캐시에 있는지 여부

  • 일부 4xx 상태 코드의 경우 오리진에서 Cache-Control max-age 또는 Cache-Control s-maxage 헤더를 반환하는지 여부

CloudFront에서는 GETHEAD 요청에 대한 응답을 항상 캐싱합니다. 또한 OPTIONS 요청에 대한 응답을 캐싱하도록 CloudFront를 구성할 수도 있습니다. CloudFront에서는 다른 메서드를 사용하는 요청에 대한 응답을 캐싱하지 않습니다.

오리진이 응답하지 않는 경우 오리진에 대한 CloudFront 요청은 시간 초과됩니다. 이 상태는 오리진이 해당 오류로 응답하지 않았더라도 오리진의 HTTP 5xx 오류로 간주됩니다. 해당 시나리오에서 CloudFront는 캐싱된 콘텐츠를 계속 제공합니다. 자세한 내용은 오리진 사용 불가 단원을 참조하세요.

로깅을 활성화한 경우 CloudFront에서는 HTTP 상태 코드에 관계없이 결과를 로그에 작성합니다.

CloudFront에서 반환되는 오류 메시지에 관련된 기능 및 옵션에 대한 자세한 내용은 다음을 참조하십시오.

사용자 지정 오류 페이지를 구성했을 때 CloudFront에서 오류를 처리하는 방법

사용자 지정 오류 페이지를 구성한 경우 CloudFront의 동작은 요청된 객체가 엣지 캐시에 있는지 여부에 따라 달라집니다.

요청된 객체가 엣지 캐시에 없는 경우

CloudFront는 다음이 모두 참이면 오리진에서 요청한 객체를 계속 가져오려 합니다.

  • 최종 사용자가 객체를 요청하는 경우

  • 객체가 엣지 캐시에 있지 않는 경우

  • 오리진이 HTTP 4xx 또는 5xx 상태 코드를 반환하며 다음 중 하나가 true인 경우

CloudFront에서는 다음을 수행합니다.

  1. 최종 사용자 요청을 받은 CloudFront 엣지 캐시에서 CloudFront는 배포 구성을 확인하여 오리진 서버에서 반환한 상태 코드에 해당하는 사용자 지정 오류 페이지의 경로를 가져옵니다.

  2. CloudFront에서는 사용자 지정 오류 페이지의 경로와 일치하는 경로 패턴을 가진 배포의 첫 번째 캐시 동작을 확인합니다.

  3. CloudFront 엣지 로케이션에서는 캐시 동작에 지정된 오리진에 사용자 지정 오류 페이지에 대한 요청을 전송합니다.

  4. 오리진에서는 엣지 로케이션에 사용자 지정 오류 페이지를 반환합니다.

  5. CloudFront가 요청한 최종 사용자에게 사용자 지정 오류 페이지를 반환하며, 다음의 최대값에 대해 사용자 지정 오류 페이지도 캐싱합니다.

    • 오류 캐싱 최소 TTL(기본값: 10초)에 의해 지정된 시간

    • 첫 번째 요청이 오류를 생성할 때 오리진에서 반환된 Cache-Control max-age 헤더 또는 Cache-Control s-maxage 헤더에 의해 지정된 시간

  6. 캐싱 시간(5단계에서 결정)이 경과한 후 CloudFront는 오리진에 다른 요청을 전달하여 요청된 객체를 다시 가져오려고 시도합니다. CloudFront는 오류 캐싱 최소 TTL에 의해 지정된 간격으로 계속 다시 시도합니다.

요청된 객체가 엣지 캐시에 있는 경우

CloudFront는 다음이 모두 참이면 현재 엣지 캐시에 있는 객체를 계속 제공하려 합니다.

  • 최종 사용자가 객체를 요청하는 경우

  • 객체가 엣지 캐시에 있지만 만료된 경우

  • 오리진이 304 상태 코드(수정되지 않음) 또는 객체의 업데이트된 버전을 반환하는 대신에 HTTP 5xx 상태 코드를 반환하는 경우

CloudFront에서는 다음을 수행합니다.

  1. 오리진이 5xx 상태 코드를 반환할 경우 CloudFront에서는 객체가 만료되었더라도 이를 제공합니다. 오류 캐싱 최소 TTL 동안 CloudFront는 엣지 캐시에서 객체를 제공함으로써 최종 사용자 요청에 지속적으로 응답합니다.

    오리진이 4xx 상태 코드를 반환할 경우 CloudFront는 최종 사용자에게 요청된 객체가 아니라 상태 코드를 반환합니다.

  2. 오류 캐싱 최소 TTL이 경과한 후, CloudFront에서는 다른 요청을 오리진에 전달함으로써 요청된 객체를 다시 가져오려고 시도합니다. 객체가 자주 요청되지 않는 경우, CloudFront에서는 오리진 서버가 아직 5xx 응답을 반환하는 중이라도 이를 엣지 캐시에서 제거할 수 있습니다. 객체가 CloudFront 엣지 캐시에 보관되는 시간에 대한 자세한 내용은 콘텐츠가 캐시에 유지되는 기간(만료) 관리 단원을 참조하십시오.

사용자 지정 오류 페이지를 구성하지 않았을 때 CloudFront에서 오류를 처리하는 방법

사용자 지정 오류 페이지를 구성하지 않은 경우 CloudFront의 동작은 요청된 객체가 엣지 캐시에 있는지 여부에 따라 달라집니다.

요청된 객체가 엣지 캐시에 없는 경우

CloudFront는 다음이 모두 참이면 오리진에서 요청한 객체를 계속 가져오려 합니다.

  • 최종 사용자가 객체를 요청하는 경우

  • 객체가 엣지 캐시에 있지 않는 경우

  • 오리진이 HTTP 4xx 또는 5xx 상태 코드를 반환하며 다음 중 하나가 true인 경우

CloudFront에서는 다음을 수행합니다.

  1. CloudFront는 최종 사용자에게 4xx 또는 5xx 상태 코드를 반환하며, 다음의 최대값에 대해 요청을 수신하는 엣지 캐시에 상태 코드도 캐싱합니다.

    • 오류 캐싱 최소 TTL(기본값: 10초)에 의해 지정된 시간

    • 첫 번째 요청이 오류를 생성할 때 오리진에서 반환된 Cache-Control max-age 헤더 또는 Cache-Control s-maxage 헤더에 의해 지정된 시간

  2. 캐싱 시간(1단계에서 결정됨) 동안 CloudFront는 동일 객체에 대한 후속 최종 사용자 요청에 캐싱된 4xx 또는 5xx 상태 코드로 응답합니다.

  3. 캐싱 시간(1단계에서 결정)이 경과한 후 CloudFront는 오리진에 다른 요청을 전달하여 요청된 객체를 다시 가져오려고 시도합니다. CloudFront는 오류 캐싱 최소 TTL에 의해 지정된 간격으로 계속 다시 시도합니다.

요청된 객체가 엣지 캐시에 있는 경우

CloudFront는 다음이 모두 참이면 현재 엣지 캐시에 있는 객체를 계속 제공하려 합니다.

  • 최종 사용자가 객체를 요청하는 경우

  • 객체가 엣지 캐시에 있지만 만료된 경우

  • 오리진이 304 상태 코드(수정되지 않음) 또는 객체의 업데이트된 버전을 반환하는 대신에 HTTP 5xx 상태 코드를 반환하는 경우

CloudFront에서는 다음을 수행합니다.

  1. 오리진이 5xx 오류 코드를 반환할 경우 CloudFront에서는 객체가 만료되었더라도 이를 제공합니다. 오류 캐싱 최소 TTL(기본값: 10초) 동안 CloudFront는 엣지 캐시에서 객체를 제공함으로써 최종 사용자 요청에 지속적으로 응답합니다.

    오리진이 4xx 상태 코드를 반환할 경우 CloudFront는 최종 사용자에게 요청된 객체가 아니라 상태 코드를 반환합니다.

  2. 오류 캐싱 최소 TTL이 경과한 후, CloudFront에서는 다른 요청을 오리진에 전달함으로써 요청된 객체를 다시 가져오려고 시도합니다. 객체가 자주 요청되지 않는 경우, CloudFront에서는 오리진 서버가 아직 5xx 응답을 반환하는 중이라도 이를 엣지 캐시에서 제거할 수 있습니다. 객체가 CloudFront 엣지 캐시에 보관되는 시간에 대한 자세한 내용은 콘텐츠가 캐시에 유지되는 기간(만료) 관리 단원을 참조하십시오.

CloudFront가 캐싱하는 HTTP 4xx 및 5xx 상태 코드

CloudFront에서는 반환된 특정 상태 코드 및 오리진이 응답으로 특정 헤더를 반환하는지 여부에 따라 오리진에서 반환된 HTTP 4xx 및 5xx 상태 코드를 캐싱합니다.

CloudFront에서 항상 캐싱하는 HTTP 4xx 및 5xx 상태 코드

CloudFront에서는 항상 오리진에서 반환한 다음 HTTP 4xx 및 5xx 상태 코드를 캐싱합니다. HTTP 상태 코드에 대해 사용자 지정 오류 페이지를 구성한 경우, CloudFront에서는 사용자 지정 오류 페이지를 캐싱합니다.

404

찾을 수 없음

414

요청-URI가 너무 큼

500

내부 서버 오류

501

구현되지 않음

502

잘못된 게이트웨이

503

서비스 사용 불가

504

게이트웨이 시간 초과

Cache-Control 헤더에 따라 CloudFront에서 캐싱하는 HTTP 4xx 상태 코드

CloudFront에서는 오리진이 Cache-Control max-age 또는 Cache-Control s-maxage 헤더를 반환할 경우 오리진에서 반환된 다음 HTTP 4xx 상태 코드만 캐싱합니다. 이러한 HTTP 상태 코드 중 하나에 대해 사용자 지정 오류 페이지를 구성한 경우 오리진이 캐시 제어 헤더 중 하나를 반환하면 CloudFront는 사용자 지정 오류 페이지를 캐싱합니다.

400

잘못된 요청

403

금지됨

405

허용되지 않은 메소드

412

사전 조건 실패

415

지원되지 않는 미디어 유형