이 문서에서는 커스텀 오류 응답 구성의 예시를 제공합니다. 커스텀 오류 응답을 구성하기 전에 커스텀 오류 응답 개요를 읽어보세요.
이 페이지에 설명된 예시 구성에서는 부하 분산기 수준, URL 도메인 수준, URL 경로 수준 등 URL 맵 리소스의 세 가지 수준에서 커스텀 오류 응답 정책을 구성합니다.
구성 예시는 개념을 바탕으로 하고 다음 문서에 설명된 설정을 기반으로 합니다.
예시 1: 모든 호스트에 공통된 모든 4xx
오류에 대한 오류 페이지 구성
이 예시에서는 VM 인스턴스 그룹 백엔드가 있는 전역 외부 애플리케이션 부하 분산기 설정에 설명된 대로 부하 분산기를 설정했다고 가정합니다.
이 예시에서 부하 분산기에 대한 요청은 web-backend-service
라는 백엔드 서비스로 라우팅됩니다. 요청에 4xx
응답이 발견되면 커스텀 오류 응답 정책이 오류 서비스로 요청을 전송하도록 구성되고 오류 객체(not-found.html
)가 클라이언트에 반환됩니다.
커스텀 오류 응답 정책을 만들려면 다음 단계를 수행합니다.
HTML 오류 페이지(
not-found.html
)를 Cloud Storage 버킷에 업로드합니다.gcloud storage cp Desktop/not-found.html gs://GCS_BUCKET_NAME/
URL 맵(
web-map-http
)을web-map-http.yaml
이라는 파일로 내보냅니다.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
커스텀 오류 응답 정책을 추가하기 전에 URL 맵(
web-map-http
)에는 다음과 비슷한 구성이 있습니다.creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
defaultCustomErrorResponsePolicy
섹션에서web-map-http.yaml
을 수정하여 다음 YAML 구성에 강조표시된 대로 커스텀 오류 응답 정책을 추가합니다. 이 예시에서는 오류 응답 정책이 부하 분산기 수준(urlMaps.defaultCustomErrorResponsePolicy
)에서 구성됩니다.creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http
모든 오류 객체를 Cloud Storage 버킷에 저장하여 부하 분산기에 연결된 백엔드 버킷에서 참조하도록 하는 것이 좋습니다. Cloud Storage 버킷은 부하 분산기를 사용하여 오류 객체를 저장하고 클라이언트에 반환할 수 있는 간단한 방법을 제공합니다. 하지만 백엔드 버킷을 사용하지 않고 오류 페이지와 관련 애셋을 제공할 수도 있습니다. 예를 들어 커스텀 오류 응답 페이지를 제공하도록 구성된 Apache 서버가 있는 VM 인스턴스 그룹 백엔드를 참조하는 백엔드 서비스를 사용할 수 있습니다.
web-map-http.yaml
에서 최신 구성을 가져와서 URL 맵을 업데이트합니다.gcloud compute url-maps import web-map-http --source web-map-http.yaml
URL 맵을 업데이트한 후 부하 분산기의 IP 주소로 트래픽 전송을 시작하기 전에 잠시 기다려야 합니다.
존재하지 않는 페이지에 대한 요청을 보냅니다.
curl -I http://IP_ADDRESS/a-page-that-does-not-exist
not-found.html
의 오류 콘텐츠가 제공되고 HTTP404
상태 코드가 반환됩니다.
예시 2: 특정 호스트의 특정 오류 코드에 대한 오류 페이지 구성
이 예시는 모든 호스트에 공통된 모든 4xx
오류에 대한 오류 페이지 구성이라는 이전 예시를 바탕으로 합니다. 여기서는 호스트 video.example.com
에 대한 요청이 video-backend-service
라는 백엔드 서비스로 라우팅되도록 부하 분산기가 이미 구성되어 있다고 가정합니다. 요청이 백엔드 서비스의 승인에 실패하면 서비스는 401 (Unauthorized)
응답을 반환합니다. 그런 다음 커스텀 오류 응답 정책은 오류 서비스로 요청을 전송하도록 구성되고 오류 객체(video-obtain-authorization.html
)가 클라이언트에 반환됩니다.
대부분의 경우 오류 콘텐츠에 로고 이미지와 같은 애셋 링크가 포함될 가능성이 높습니다. 클라이언트는 오류 페이지에서 참조된 애셋에 대한 요청을 수행하고, 이를 가져오기 위해 부하 분산기로 추가 요청이 전송됩니다.
그러면 부하 분산기가 요청에 응답하고 연결된 애셋을 반환합니다.
이렇게 하려면 이러한 애셋을 defaultCustomErrorResponsePolicy
에 지정된 동일한 백엔드 버킷에 저장하고 애셋 URL(예: /assets/logo.svg
)에서 백엔드 버킷으로 요청을 라우팅하는 규칙을 추가하면 됩니다. 연결된 애셋 요청에 대한 부하 분산기의 응답은 오류 응답이 아니라 다음 구성과 같이 일반적인 응답입니다.
pathMatchers: ... pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
또한 정책을 사용하면 요청의 최종 응답 코드를 정의할 수 있습니다. 이 예시에서는 응답 코드가 overrideResponseCode
값을 200
으로 지정하여 401
에서 200
으로 변경되었습니다. 다른 모든 4xx
오류의 경우 not-found.html
의 오류 콘텐츠가 클라이언트에 반환되고 백엔드 서비스의 원래 HTTP 응답 코드가 보존됩니다.
다음 표와 같이 이 예시에서는 두 개의 커스텀 오류 응답 정책이 구성되어 있습니다. 이러한 정책은 부하 분산기 수준 및 URL 도메인 수준에서 생성됩니다.
정책 수준 | API 필드 | HTTP 응답 코드 일치 | 오류 서비스 | 오류 객체 반환 |
---|---|---|---|---|
URL 도메인 | pathMatchers[].defaultCustomErrorResponsePolicy |
401 | CUSTOM_ERRORS_BUCKET |
video-obtain-authorization.html |
부하 분산기 | urlMaps.defaultCustomErrorResponsePolicy |
모든 4xx | CUSTOM_ERRORS_BUCKET |
not-found.html |
호스트 video.example.com
의 401
오류 코드에 대한 커스텀 오류 응답 정책을 만들려면 다음 단계를 수행합니다.
HTML 오류 페이지(
video-obtain-authorization.html
) 및 관련 애셋(logo.svg
)을 Cloud Storage 버킷에 업로드합니다.gcloud storage cp Desktop/video-obtain-authorization.html gs://GCS_BUCKET_NAME/ gcloud storage cp Desktop/logo.svg gs://GCS_BUCKET_NAME/assets/
URL 맵(
web-map-http
)을web-map-http.yaml
이라는 파일로 내보냅니다.gcloud compute url-maps export web-map-http --destination web-map-http.yaml
defaultCustomErrorResponsePolicy
섹션에서web-map-http.yaml
을 수정하여 다음 YAML 구성에 강조표시된 대로 커스텀 오류 응답 정책을 추가합니다. 이 예시에서는 커스텀 오류 응답 정책이 부하 분산기 수준(urlMaps.defaultCustomErrorResponsePolicy
) 및 URL 도메인 수준(pathMatchers[].defaultCustomErrorResponsePolicy
)에서 구성됩니다.오류 서비스가 URL 도메인 수준에서 정의되지 않았으므로 URL 도메인 수준의 오류 서비스는 기본적으로 상위 수준인 부하 분산기 수준에서 정의된 오류 서비스로 지정됩니다.
creationTimestamp: '2020-01-14T19:12:44.680-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/web-backend-service defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/not-found.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET fingerprint: d0eJJpCBpHg= hostRules: - hosts: - video.example.com pathMatcher: path-matcher-1 kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-backend-service name: path-matcher-1 defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 401 path: "/video-obtain-authorization.html overrideResponseCode: 200 // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. // A URL map path rule to route requests from asset URLs (for example, "/assets/logo.svg") to the backend bucket. pathRules: - service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/CUSTOM_ERRORS_BUCKET paths: - /assets
web-map-http.yaml
에서 최신 구성을 가져와서 URL 맵을 업데이트합니다.gcloud compute url-maps import web-map-http --source web-map-http.yaml
URL 맵을 업데이트한 후 부하 분산기의 IP 주소로 트래픽 전송을 시작하기 전에 잠시 기다려야 합니다.
호스트에 승인이 필요한 URL에 대한 요청을 보냅니다.
curl -I http://video.example.com/a-page-that-needs-authorization
video-obtain-authorization.html
의 오류 콘텐츠가 제공되고 HTTP200
상태 코드가 반환됩니다.
예시 3: 여러 도메인, 경로, 오류 응답 코드에 대해 세분화된 커스텀 오류 응답 정책 구성
이 예시에서는 여러 URL 도메인, URL 경로, HTTP 오류 응답 코드에 대해 특정 오류 응답을 맞춤설정하는 방법을 보여줍니다.
이 예시에서 설명하는 커스텀 오류 응답 구성은 다음을 가정합니다.
다음 이미지에 표신된 대로 호스트 및 경로 기반 라우팅을 사용하여 외부 애플리케이션 부하 분산기의 URL 맵을 구성했습니다.
커스텀 오류 페이지를 반환하도록
BUCKET_1
및BUCKET_2
라는 백엔드 버킷 두 개를 구성했습니다.
다음 표와 같이 이 예시에는 4개의 커스텀 오류 응답 정책이 구성되어 있습니다. 이러한 정책은 다음 우선순위에 따라 세 가지 수준에서 생성됩니다.
- URL 경로(
pathMatchers[].pathRules[].customErrorResponsePolicy
) - URL 도메인(
pathMatchers[].defaultCustomErrorResponsePolicy
) - 부하 분산기(
urlMaps.defaultCustomErrorResponsePolicy
)
정책 수준 | 요청 URL | 일치하는 HTTP 응답 코드 | 오류 서비스 | 오류 객체 반환 |
---|---|---|---|---|
URL 경로 | example.net/video/hd/* |
404 | BUCKET-2 |
not-found-hd-videos-404.html |
URL 경로 | example.net/video/sd/* |
404 | BUCKET-2 |
not-found-sd-videos-404.html |
URL 도메인 | example.net/* |
모든 4xx | BUCKET-1 |
example-net-4xx.html |
부하 분산기 | Any |
모든 4xx 또는 5xx | BUCKET-1 |
error-page-generic.html |
부하 분산기 수준의 커스텀 오류 응답 정책은 정책이 오류 조건과 일치하고 하위 수준에서 즉, URL 도메인 또는 URL 경로에서 오류 코드에 일치하는 정책이 정의되지 않은 경우에만 적용됩니다.
마찬가지로 URL 도메인 수준의 커스텀 오류 응답 정책은 정책이 오류 조건과 일치하고 하위 수준인 URL 경로에서 오류 코드에 일치하는 정책이 정의되지 않은 경우에만 적용됩니다. 이 예시에서 URL www.example.net/video/hd
에 대한 요청에 404
응답이 발생하면 not-found-hd-videos-404.html
파일이 반환됩니다. 하지만 URL www.example.net/video/
에 대한 요청에 대해 404
응답이 발생하면 example-net-4xx.html
파일이 반환됩니다.
URL 맵의 세 가지 수준에서 커스텀 오류 응답 정책을 만들려면 다음 단계를 수행합니다.
Cloud Storage 버킷에 오류 객체를 업로드합니다.
gcloud storage cp Desktop/error-page-generic.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/example-net-4xx.html gs://GCS_BUCKET_1_NAME/ gcloud storage cp Desktop/not-found-sd-videos-404.html gs://GCS_BUCKET_2_NAME/ gcloud storage cp Desktop/not-found-hd-videos-404.html gs://GCS_BUCKET_2_NAME/
URL 맵(
video-org-url-map
)을video-org-url-map.yaml.
이라는 파일로 내보냅니다.gcloud compute url-maps export video-org-url-map --destination video-org-url-map.yaml
커스텀 오류 응답 정책을 추가하기 전에 URL 맵(
video-org-url-map
)에는 다음과 비슷한 구성이 있습니다.creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
defaultCustomErrorResponsePolicy
섹션에서video-org-url-map.yaml
을 수정하여 다음 YAML 구성에 강조표시된 대로 커스텀 오류 응답 정책을 추가합니다.오류 서비스가 URL 도메인 수준에서 정의되지 않았으므로 URL 도메인 수준의 오류 서비스는 기본적으로 상위 수준인 부하 분산기 수준에서 정의된 오류 서비스로 지정됩니다.
creationTimestamp: '2021-03-05T13:34:15.833-08:00' defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/org-site fingerprint: mfyJIT7Zurs= hostRules: - hosts: - '*' pathMatcher: video-matcher - hosts: - example.net pathMatcher: video-matcher id: '8886405179645041976' kind: compute#urlMap name: video-org-url-map defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx - 5xx path: '/error-page-generic.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-site name: video-matcher defaultCustomErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 4xx path: '/example-net-4xx.html' // The `errorService` in `pathMatchers[].defaultCustomErrorResponsePolicy` references the // error service configured in `urlMaps.defaultCustomErrorResponsePolicy`. pathRules: - paths: - /video/hd - /video/hd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-hd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-hd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 - paths: - /video/sd - /video/sd/* service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/video-sd customErrorResponsePolicy: errorResponseRules: - matchResponseCodes: - 404 path: '/not-found-sd-videos-404.html' errorService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BUCKET-2 selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/video-org-url-map
video-org-url-map.yaml
에서 최신 구성을 가져와서 URL 맵을 업데이트합니다.gcloud compute url-maps import video-org-url-map --source video-org-url-map.yaml
URL 맵을 업데이트한 후 부하 분산기의 IP 주소로 트래픽 전송을 시작하기 전에 잠시 기다려야 합니다.
존재하지 않는 페이지에 대한 요청을 보냅니다.
curl -I http://example.net/a-page-that-does-not-exist
example-net-4xx.html
의 오류 콘텐츠가 제공됩니다.마찬가지로 다른 URL 도메인 및 URL 경로를 가진 다른 URL도 테스트합니다.