사용자 지정 오류 응답 생성 중 - Amazon CloudFront

사용자 지정 오류 응답 생성 중

CloudFront를 통해 제공하는 객체를 특정 이유로 인해 사용할 수 없는 경우, 일반적으로 웹 서버에서는 해당하는 HTTP 상태 코드를 CloudFront에 반환하여 이를 나타냅니다. 예를 들어 최종 사용자가 잘못된 URL을 요청한 경우 웹 서버에서는 HTTP 404(찾을 수 없음) 상태 코드를 CloudFront에 반환하고 CloudFront에서는 다시 최종 사용자에게 이 상태 코드를 반환합니다.

원하는 경우 최종 사용자에게 사용자 지정 오류 응답을 반환하도록 CloudFront를 구성할 수 있습니다. 또한 오류가 발생할 경우 CloudFront가 응답하는 방식을 관리할 수 있는 몇 가지 옵션이 제공됩니다. 사용자 지정 오류 메시지에 대한 옵션을 지정하려면 CloudFront 배포를 업데이트하여 해당 값을 지정합니다. 자세한 내용은 오류 응답 동작 구성 섹션을 참조하세요.

HTTP 상태 코드에 대해 사용자 지정 오류 페이지를 반환하도록 CloudFront를 구성했으나 사용자 지정 오류 페이지를 사용할 수 없는 경우, CloudFront에서는 사용자 지정 오류 페이지가 포함된 오리진에서 CloudFront로 보낸 상태 코드를 최종 사용자에게 반환합니다. 예를 들어, 사용자 지정 오리진에서 500 상태 코드를 반환하고 500 상태 코드에 대한 사용자 지정 오류 페이지를 Amazon S3 버킷에서 가져오도록 CloudFront를 구성했다고 가정합니다. 하지만 누군가 실수로 사용자 지정 오류 페이지를 버킷에서 삭제했고, CloudFront에서는 HTTP 404 상태 코드(찾을 수 없음)를 객체를 요청한 최종 사용자에게 반환합니다.

CloudFront에서 사용자 지정 오류 페이지를 최종 사용자에게 반환하는 경우, 사용자 지정 오류 페이지에 대해 표준 CloudFront 요금을 지불하며 요청된 객체에 대해서는 요금이 부과되지 않습니다. CloudFront 요금에 대한 자세한 내용은 Amazon CloudFront 요금을 참조하세요.

오류 응답 동작 구성

사용자 지정 오류 응답을 구성하려면 CloudFront 콘솔, CloudFront API 또는 을 사용할 수 있습니다AWS CloudFormation 구성 업데이트에 선택한 방법과 관계없이 다음 팁과 권장 사항을 고려하세요.

  • CloudFront에서 액세스 가능한 위치에 사용자 지정 오류 페이지를 저장합니다. Amazon S3 버킷에 저장하는 것이 좋으며 나머지 웹 사이트 또는 애플리케이션 콘텐츠와 같은 위치에 저장하지 않는 것이 좋습니다. 웹 사이트 또는 애플리케이션과 동일한 오리진에 사용자 지정 오류 페이지를 저장할 경우 오리진이 5xx 오류를 반환하기 시작하면 오리진 서버를 사용할 수 없기 때문에 CloudFront가 사용자 지정 오류 페이지를 가져올 수 없습니다. 자세한 내용은 다른 위치에 객체 및 사용자 지정 오류 페이지 저장 섹션을 참조하세요.

  • CloudFront에 사용자 지정 오류 페이지를 가져올 권한이 있는지 확인합니다. 사용자 지정 오류 페이지가 Amazon S3에 저장되어 있는 경우 페이지에 공개적으로 액세스할 수 있거나 CloudFront 오리진 액세스 ID(OAI)를 구성해야 합니다. 사용자 지정 오류 페이지가 사용자 지정 오리진에 저장되어 있는 경우 페이지에 공개적으로 액세스할 수 있어야 합니다.

  • (선택 사항) 원하는 경우 사용자 지정 오류 페이지와 함께 Cache-Control 또는 Expires 헤더를 추가하도록 오리진을 구성합니다. [오류 캐싱 최소 TTL(Error Caching Minimum TTL)] 설정을 사용하여 CloudFront에서 사용자 지정 오류 페이지를 캐싱할 기간을 제어할 수도 있습니다. 자세한 내용은 CloudFront에서 오류를 캐싱하는 기간 제어 섹션을 참조하세요.

사용자 지정 오류 응답 구성(CloudFront 콘솔)

CloudFront 콘솔에서 사용자 지정 오류 응답을 구성하려면 CloudFront 배포가 있어야 합니다. 콘솔에서 사용자 지정 오류 응답에 대한 구성 설정은 기존 배포에만 사용할 수 있습니다. 배포를 생성하는 방법에 대한 자세한 내용은 간단한 CloudFront 배포 시작하기 섹션을 참조하세요.

사용자 지정 오류 응답을 구성하려면(콘솔)

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/cloudfront/v3/home#distributions에 있는 CloudFront 콘솔에서 배포 페이지를 엽니다.

  2. 배포 목록에서 업데이트할 배포를 선택합니다.

  3. [오류 페이지(Error Pages)] 탭을 선택한 다음 [사용자 지정 오류 응답 생성(Create Custom Error Response)]을 선택합니다.

  4. 관련 값들을 입력합니다. 자세한 내용은 배포를 만들거나 업데이트할 때 지정하는 값에서 사용자 지정 오류 페이지 및 오류 캐싱 섹션을 참조하세요.

  5. 원하는 값을 입력한 후 [생성(Create)]을 선택합니다.

사용자 지정 오류 응답 구성(CloudFront API 또는 AWS CloudFormation)

CloudFront API 또는 AWS CloudFormation을(를) 사용하여 사용자 지정 오류 응답을 구성하려면 배포에서 CustomErrorResponse 유형을 사용합니다. 자세한 내용은 다음 자료를 참조하십시오.

특정 HTTP 상태 코드에 대한 사용자 지정 오류 페이지 만들기

기본 메시지 대신 나머지 웹 사이트와 동일한 형식을 사용하는 페이지와 같은 사용자 지정 오류 메시지를 표시하려는 경우, CloudFront가 최종 사용자에게 사용자 지정 오류 메시지가 포함된 HTML 파일 등의 객체를 반환하게 하면 됩니다.

반환하려는 파일과 이 파일을 반환해야 하는 오류를 지정하려면 CloudFront 배포를 업데이트하여 해당 값을 지정합니다. 자세한 내용은 오류 응답 동작 구성 섹션을 참조하세요.

예를 들어 다음은 사용자 지정 오류 페이지입니다.


				AWS 404 페이지

지원되는 HTTP 상태 코드 각각에 서로 다른 객체를 지정하거나 지원되는 상태 코드 전체에 동일한 객체를 사용할 수 있습니다. 일부 상태 코드에 사용자 지정 오류 페이지를 지정하고 다른 상태 코드에는 사용자 지정 오류 페이지를 지정하지 않도록 선택할 수 있습니다.

CloudFront를 통해 제공하는 객체는 다양한 이유로 사용 불가능할 수 있습니다. 이러한 이유는 넓게 보면 다음 두 가지 범주로 나뉩니다.

  • 클라이언트 오류: 요청에 문제가 있음을 나타냅니다. 지정된 이름의 객체를 사용할 수 없거나, 사용자에게 Amazon S3 버킷의 객체를 가져오기 위해 필요한 권한이 없는 경우를 예로 들 수 있습니다. 클라이언트 오류가 발생하면 오리진에서는 4xx 범위의 HTTP 상태 코드를 CloudFront에 반환합니다.

  • 서버 오류: 오리진 서버에 문제가 있음을 나타냅니다. HTTP 서버가 사용 중이거나 사용 불가능한 상태인 경우를 예로 들 수 있습니다. 서버 오류가 발생하면 오리진 서버에서 5xx 범위의 HTTP 상태 코드를 CloudFront에 반환합니다. 또는 특정 기간 동안 CloudFront에서 오리진 서버로부터 응답을 가져오지 않고 504 상태 코드(게이트웨이 시간 초과)를 적용합니다.

CloudFront에서 사용자 지정 오류 페이지를 반환할 수 있는 HTTP 상태 코드에는 다음이 포함됩니다.

  • 400, 403, 404, 405, 414, 416

    참고

    HTTP 상태 코드 416(요청된 범위를 충족할 수 없음)에 대한 사용자 지정 오류 페이지를 만들 수 있으며 오리진에서 CloudFront로 상태 코드 416을 반환할 경우 CloudFront에서 최종 사용자로 반환하는 HTTP 상태 코드를 변경할 수 있습니다. (자세한 내용은 CloudFront에서 반환하는 응답 코드 변경 섹션을 참조하세요.) 그러나 CloudFront에서는 상태 코드 416 응답을 캐싱하지 않습니다. 따라서 상태 코드 416에 대해 [오류 캐싱 최소 TTL(Error Caching Minimum TTL)]의 값을 지정하더라도 CloudFront에 이 값이 사용되지 않습니다.

  • 500, 501, 502, 503, 504

    참고

    경우에 따라서는 HTTP 503 상태 코드에 대한 사용자 지정 오류 페이지를 반환하도록 CloudFront를 구성하더라도 이 페이지가 반환되지 않습니다. CloudFront 오류 코드가 Capacity Exceeded 또는 Limit Exceeded인 경우 CloudFront는 사용자 지정 오류 페이지를 사용하지 않고 최종 사용자에게 503 상태 코드를 반환합니다.

CloudFront에서 오리진에서 보낸 오류 응답을 처리하는 방법에 대한 자세한 설명을 보려면 CloudFront에서 오리진의 HTTP 4xx 및 5xx 상태 코드를 처리 및 캐싱하는 방법 단원을 참조하세요.

다른 위치에 객체 및 사용자 지정 오류 페이지 저장

객체와 사용자 지정 오류 페이지를 서로 다른 위치에 저장하려는 경우, 배포에는 다음을 충족하는 캐시 동작이 포함되어야 합니다.

  • 경로 패턴의 값이 사용자 지정 오류 메시지와 일치합니다. /4xx-errors라는 이름의 디렉터리에 있는 Amazon S3 버킷에 4xx 오류에 대한 사용자 지정 오류 페이지를 저장한 경우를 예로 들어 보겠습니다. 배포에는 사용자 지정 오류 페이지에 대한 요청을 해당 위치로 라우팅하는 경로 패턴(예: /4xx-errors/*)의 캐시 동작이 포함되어야 합니다.

  • Origin(오리진)의 값은 사용자 지정 오류 페이지를 포함한 오리진에 대한 Origin ID(오리진 ID)의 값을 지정합니다.

자세한 내용은 캐시 동작 설정 주제에서 배포를 만들거나 업데이트할 때 지정하는 값 단원을 참조하십시오.

CloudFront에서 반환하는 응답 코드 변경

오리진에서 받은 것과 다른 HTTP 상태 코드를 최종 사용자에게 반환하도록 CloudFront를 구성할 수 있습니다. 예를 들어 오리진에서 CloudFront에 500 상태 코드를 반환하는 경우, CloudFront에서 사용자 지정 오류 페이지와 200 상태 코드(OK)를 최종 사용자에게 반환하려 할 수 있습니다. CloudFront에서 오리진에서 최종 사용자에게 반환한 것과 다른 상태 코드를 CloudFront로 반환하려는 이유는 다음과 같이 다양합니다.

  • 일부 인터넷 디바이스(예: 일부 방화벽 및 기업 프록시)에서는 HTTP 4xx 및 5xx 상태 코드를 가로채서 응답이 최종 사용자에게 반환되는 것을 막습니다. 이 시나리오에서 200을 대체하면 응답을 가로채지 않습니다.

  • 여러 가지 클라이언트 오류 또는 서버 오류 중에 구별할 필요가 없는 경우, CloudFront에서 전체 4xx 또는 5xx 상태 코드에 대해 반환하는 값으로 400 또는 500을 지정할 수 있습니다.

  • 고객이 웹 사이트가 다운된 것을 모르도록 200 상태 코드(OK)와 정적 웹 사이트를 반환하려 할 수 있습니다.

CloudFront 표준 로그를 활성화하고 응답에서 HTTP 상태 코드를 변경하도록 CloudFront를 구성하는 경우 로그의 sc-status 열 값에 지정한 상태 코드가 포함됩니다. 그러나 x-edge-result-type 열의 값은 영향을 받지 않습니다. 여기에는 오리진 응답의 결과 유형이 포함됩니다. 예를 들어 오리진이 200(찾을 수 없음)을 CloudFront로 반환할 때 최종 사용자에게 404의 상태 코드를 반환하도록 CloudFront를 구성한다고 가정합니다. 오리진이 요청에 404 상태 코드로 응답하는 경우 로그의 sc-status 열 값은 200이 되지만 x-edge-result-type 열의 값은 Error가 됩니다.

다음 HTTP 상태 코드와 사용자 지정 오류 페이지를 반환하도록 CloudFront를 구성할 수 있습니다.

  • 200

  • 400, 403, 404, 405, 414, 416

  • 500, 501, 502, 503, 504

CloudFront에서 오류를 캐싱하는 기간 제어

오리진에서 HTTP 4xx 또는 5xx 상태 코드를 반환할 경우, 기본적으로 CloudFront가 이러한 오류 응답을 10초 동안 캐싱합니다. 그런 다음 CloudFront는 객체에 대한 다음 요청을 오리진에 제출하여 오류를 일으킨 문제가 해결되었고 요청된 객체를 사용할 수 있는지 확인합니다.

참고

HTTP 상태 코드 416(요청된 범위를 충족할 수 없음)에 대한 사용자 지정 오류 페이지를 만들 수 있으며 오리진에서 CloudFront로 상태 코드 416을 반환할 경우 CloudFront에서 최종 사용자로 반환하는 HTTP 상태 코드를 변경할 수 있습니다. (자세한 내용은 CloudFront에서 반환하는 응답 코드 변경 섹션을 참조하세요.) 그러나 CloudFront에서는 상태 코드 416 응답을 캐싱하지 않습니다. 따라서 상태 코드 416에 대해 [오류 캐싱 최소 TTL(Error Caching Minimum TTL)]의 값을 지정하더라도 CloudFront에 이 값이 사용되지 않습니다.

CloudFront에서 캐싱하는 4xx 및 5xx 상태 코드 각각에 대해 오류 캐싱 기간(오류 캐싱 최소 TTL(Error Caching Minimum TTL))을 지정할 수 있습니다. 기간을 지정할 때는 다음 사항에 유의하십시오.

  • 짧은 오류 캐싱 기간을 지정하는 경우, CloudFront에서는 더 긴 기간을 지정하는 경우에 비해 오리진에 더 많은 요청을 전달합니다. 5xx 오류의 경우, 이는 원래 오리진에서 오류를 반환하게 만든 문제를 악화시킬 수 있습니다.

  • 오리진에서 객체에 대한 오류를 반환할 경우, CloudFront에서는 오류 캐싱 기간이 경과할 때까지 객체에 대한 요청에 오류 응답이나 사용자 지정 오류 페이지로 응답합니다. 오류 캐싱 기간을 길게 지정한 경우, CloudFront에서는 객체가 다시 사용 가능한 상태가 된 후에도 장시간 오류 응답이나 사용자 지정 오류 페이지로 요청에 계속해서 응답할 수 있습니다.

CloudFront에서 개별 객체에 대한 오류를 캐싱하는 시간을 제어하려는 경우, 다음과 같이 관련 헤더를 해당 객체에 대한 오류 응답에 추가하도록 오리진 서버를 구성할 수 있습니다.

  • 오리진에서 Cache-Control: max-age 또는 Cache-Control: s-maxage 지시문 또는 Expires 헤더를 추가하는 경우:

    CloudFront는 헤더의 값과 [오류 캐싱 최소 TTL(Error Caching Minimum TTL)]의 값 중 더 큰 값 동안 오류 응답을 캐싱합니다.

    Cache-Control: max-age 값과 Cache-Control: s-maxage 값은 오류 페이지를 가져오는 캐시 동작에 대해 설정된 최대 TTL 값보다 클 수 없습니다.

  • 오리진에서 다른 Cache-Control 지시문을 추가하거나 헤더를 추가하지 않는 경우:

    CloudFront는 [오류 캐싱 최소 TTL(Error Caching Minimum TTL)]의 값 동안 오류 응답을 캐싱합니다.

객체에 대한 4xx 또는 5xx 상태 코드의 만료 시간이 원하는 시간보다 더 긴 경우 객체를 다시 사용할 수 있게 될 때 요청된 객체의 URL을 사용하여 캐싱된 오류 코드를 무효화할 수 있습니다. 오리진에서 여러 객체에 대한 오류 응답을 반환하려는 경우, 각 객체를 개별적으로 무효화해야 할 수 있습니다. 객체 무효화에 대한 자세한 내용은 파일 무효화 단원을 참조하십시오.