カスタム エラー レスポンスの概要

グローバル外部アプリケーション ロードバランサを使用すると、HTTP エラー ステータス コード(4xx5xx)が生成されたときの独自のエラー レスポンスをカスタマイズできます。ロードバランサ インスタンスとバックエンド インスタンスの両方によって生成されたエラーのエラー レスポンスをカスタマイズできます。Google Cloud Armor によってトラフィックが拒否されたときに生成されるエラー レスポンス コードのエラー レスポンスもカスタマイズできます。

次のカスタム エラー ページの例では、自社のブランディングとロゴ、関連ページへのリンク、カスタマイズされたメッセージを使用して、外部公開のコンシューマ アプリケーションのエラー レスポンスを構成しています。

カスタム HTTP エラー レスポンスのページ。
カスタム HTTP エラー レスポンスのページ

カスタム エラー レスポンス ポリシーを使用すると、さまざまな HTTP エラー ステータス コード、URL ドメイン、URL パス、HTTP リクエスト ヘッダー、パラメータ フィールドにエラー レスポンスを構成できます。

カスタム エラー レスポンスには次のようなメリットがあり、ユーザー エクスペリエンスを向上させることができます。

  • 一貫したブランディング エクスペリエンスを提供する
  • コンテキスト情報と関連性のある情報を提供して、ユーザビリティとユーザー エクスペリエンスを向上させる
  • ダウンタイムとクライアントサイドのエラーによる悪影響を軽減する
  • ネットワーク セキュリティを強化する

カスタム エラー レスポンス ポリシーを構成しない場合は、図 2 に示すように、ブランド化されていない一般的なエラー オブジェクトが表示されます。

一般的な HTTP エラー レスポンスのページ。
一般的な HTTP エラー レスポンスのページ

ユースケース

カスタム エラー レスポンス機能は多くのユースケースに対応しています。このセクションでは、その一部を紹介します。

独自のメンテナンス ページを定義する

バックエンドが異常な状態またはメンテナンス モードの場合は、会社のブランディングと情報を含むエラーページを返すことができます。コンテキストに応じたエラーページを作成し、コンタクト センターの電話番号や、ユーザーがウェブサイトに再度アクセスするタイミングなどの有用な情報を提供できます。ホスト名や HTTP エラーコードなどのエラー条件に基づいてエラーページをカスタマイズできます。

独自のデフォルト エラー ページを定義する

特定のエラーコードごとにエラー レスポンスをカスタマイズできます。たとえば、401 (Unauthorized) HTTP レスポンス コードに対して「ログインまたは登録」のメッセージを表示するエラーページを設定できます。また、他のすべての 4xx シリーズと 5xx シリーズの HTTP エラーコードに対して、会社のブランディングなどの関連情報を表示するデフォルトのエラーページを設定することもできます。

セキュリティ ルールのエラー レスポンスを定義する

Google Cloud Armor セキュリティ ポリシーによってトラフィックが拒否されたときに生成されるエラー レスポンス コードに対して、カスタム エラー ページを返すことができます。このエラーページは、Google Cloud Armor セキュリティ ルールに入力したのと同じ 4xx シリーズまたは 5xx シリーズの HTTP エラーコードで構成する必要があります。

ダウンタイムの影響を軽減する

200 (OK) HTTP ステータス コードを返し、静的ウェブページを提供するようにエラー レスポンスを構成することもできます。これにより、ダウンタイム発生時にエラーページではなく、より状況に適した有益な情報を表示できます。

クライアント リクエストの種類に基づいてエラー レスポンスをカスタマイズする

HTTP リクエスト ヘッダーとパラメータContent-Type ヘッダーなど)に基づいてエラー レスポンスをカスタマイズできます。元のリクエストをエラーサービスに転送する際に、ルーティングで Content-Type ヘッダーが評価され、ウェブページ(ブラウザからのリクエストの場合)または JSON(ウェブ API からのリクエストの場合)が配信されます。

カスタム エラー レスポンス ポリシーの仕組み

カスタム エラー レスポンス ポリシーは、URL マップリソースの 3 つのレベル(ロードバランサ レベル、URL ドメインレベル、URL パスレベル)で定義できます。

  • ロードバランサ レベル。このポリシーは、ロードバランサが受信したすべてのトラフィックに適用されます。

  • URL ドメインレベル。このポリシーは、特定のドメイン名またはホスト名(www.example.com など)に送信されるトラフィックに適用されます。

  • URL パスレベル。このポリシーは、特定のパス(www.example.com/images/* など)に送信されるトラフィックに適用されます。このレベルでは、HTTP リクエスト ヘッダーとパラメータで高度な一致条件(Content-Type:application/json など)を使用することもできます。

次の表に、ロードバランサ レベル、URL ドメインレベル、URL マップの URL パスレベルで適用されるカスタム エラー レスポンス ポリシーを示します。

ポリシーレベル API フィールド
ロードバランサ urlMaps.defaultCustomErrorResponsePolicy
URL ドメイン pathMatchers[].defaultCustomErrorResponsePolicy
URL パス

pathMatchers[].pathRules[].customErrorResponsePolicy

pathMatchers[].routeRules[].customErrorResponsePolicy

URL マップリソースの複数のレベルでカスタム エラー レスポンス ポリシーを構成すると、URL マップの最下位レベルのカスタム エラー ポリシーに指定されているエラー オブジェクトが返されます。URL マップの下位レベルで定義されたエラー レスポンス ポリシーは、より具体的であり、URL マップの上位レベルで定義されたエラー レスポンス ポリシーよりも優先されます。

たとえば、ロードバランサ レベルのカスタム エラー レスポンス ポリシーは、ポリシーがエラー条件に一致し、下位レベル(つまり、URL ドメインまたは URL パス)のエラーコードに一致するポリシーが定義されていない場合にのみ適用されます。同様に、URL ドメインレベルのカスタム エラー レスポンス ポリシーは、ポリシーがエラー条件に一致し、下位レベルのエラーコードに一致するポリシーが定義されていない場合にのみ適用されます。この構成の詳細については、ドメイン、パス、エラー レスポンス コードごとに詳細なカスタム エラー レスポンス ポリシーを構成するをご覧ください。

HTTP エラー レスポンス コードと一致する複数のエラー レスポンス ルールを指定する

カスタム エラー レスポンス ポリシー内の任意のレベルで、複数のエラー レスポンス ルールを指定できます。これらのルールでは、HTTP エラー レスポンスを特定のエラーコードまたはエラーコードの範囲と照合できます。エラーコードの範囲のルールと特定のエラーコードのルールを指定すると、特定のエラーコードを持つルールが優先されます。

たとえば、401 (Unauthorized) エラーコードのルールと、4xx シリーズのすべてのエラーコードに別のルールを構成するとします。バックエンド サービスが 401 エラーコードを返すと、401 エラーに一致するルールが適用されます。ただし、バックエンド サービスが 403 エラーコードを返す場合は、4xx エラーのルールが適用されます。

HTTP レスポンス コードをオーバーライドする

エラー レスポンス ルールを使用すると、ロードバランサから返される HTTP レスポンス コードを変更できます。つまり、サーバーによって生成されたレスポンス コードをオーバーライドして、リクエストの最終的なレスポンス コードを定義できます。200 (OK)4xx シリーズ、5xx シリーズのレスポンス コード、その他の 3 桁のレスポンス コードなど、任意の HTTP レスポンス コードを返すように指定できます。レスポンス コードのオーバーライドの詳細については、特定のホストの特定のエラーコードのエラーページを構成するをご覧ください。

オーバーライド レスポンス コードを定義すると、ロード バランシング ログに新しいフィールド overrideResponseCodeServed としてキャプチャされます。このフィールドにデータが入力されるのは、カスタム エラー レスポンス ポリシーによってオーバーライド レスポンス コードが適用されたリクエストに対してのみです。

httpRequest フィールドにロギングされた status コードには影響しません。サーバーによって生成された HTTP レスポンス コードまたはロードバランサが返す HTTP レスポンスがキャプチャされます。レスポンス コードがカスタム エラー レスポンス ポリシーによって変更されている場合、このステータス コードはクライアントに提供される実際のコードと異なる場合があります。

カスタム エラー レスポンスをキャッシュに保存する

カスタム エラー レスポンスをキャッシュに保存するには、エラーを生成したバックエンドにネガティブ キャッシュ ポリシーを指定します。これにより、一般的なエラーやリダイレクトに詳細なキャッシュを適用できるようになります。オリジンの負荷を軽減し、レスポンスのレイテンシを短縮することで、エンドユーザーのエクスペリエンスを向上させることができます。

エラーを生成したバックエンドに定義されたネガティブ キャッシュ ポリシーは、エラーサービスでエラー オブジェクトに定義された Cache-Control メタデータよりも常に優先されます。さらに、ロードバランサによってオーバーライド レスポンス コードが返された場合、ネガティブ キャッシュ ポリシーは、バックエンドがロードバランサに返した元のレスポンス コードではなく、オーバーライド レスポンス コードの値に基づいて適用されます。エラーコード以外のコード(HTTP 200)がオーバーライド レスポンス コードとして返された場合、ネガティブ キャッシュ ポリシーは適用されません。

エラー レスポンスの有効期間(TTL)が経過していない場合、ロードバランサはバックエンド サービスまたはバックエンド バケットにリクエストをルーティングせずに、キャッシュ内のコンテンツの提供を継続します。ただし、この動作は、ロードバランサで Cloud CDN が有効になっているかどうかによって異なります。

ロードバランサで Cloud CDN が有効になっている

このセクションでは、Cloud CDN が有効で、カスタム エラー レスポンスが使用されている場合のロードバランサの動作について説明します。

  1. ロードバランサがリクエストを受信すると、Cloud CDN キャッシュがチェックされます。ロードバランサは、ユーザーのリクエストに対するキャッシュ レスポンスを検出すると、キャッシュ レスポンスをユーザーに返します。このキャッシュ レスポンスは、ユーザーがリクエストしたコンテンツまたはカスタム エラー オブジェクトのいずれかです。

  2. キャッシュミスが発生した場合、リクエストはロードバランサによって処理され、バックエンドに送信されます。

  3. バックエンドがエラー以外のレスポンスを返した場合、そのレスポンスがエンドユーザーに返されます。ただし、クライアント リクエストでエラー(4xx または 5xx HTTP レスポンス コード)が発生した場合、ロードバランサは、次のように特定のエラーサービスからカスタム エラー オブジェクトを取得しようとします。

    1. ロードバランサは、すべてのカスタム エラー レスポンス ポリシーを確認し、エラー ステータス コードとその他の一致条件に対応するカスタム エラー オブジェクトの適切なパスを取得します。

    2. ロードバランサは、カスタム エラー オブジェクトのリクエストを、カスタム エラー レスポンス ポリシーで指定したエラーサービスに転送します。「エラーサービス」という用語は、カスタム エラー コンテンツを提供するバックエンド バケットまたはバックエンド サービスを指します。

    3. ロードバランサは、リクエストを行ったクライアントにカスタム エラー オブジェクトを返します。また、Cloud CDN にオブジェクトを送信して、cdnPolicy.negativeCachingPolicy[].ttl で指定された時間、エラー オブジェクトをキャッシュに保存します。

ロードバランサで Cloud CDN が無効になっている

Cloud CDN が無効になっている場合は、バックエンド サービスではなく、バックエンド バケットをエラーサービスとして使用することをおすすめします。これは、Cloud CDN が無効になっている場合、バックエンド サービスがコンテンツをキャッシュに保存できないためです。ただし、バックエンド バケットにはキャッシュ機能が組み込まれているため、Cloud CDN が無効になっていてもエラー レスポンスをキャッシュに保存できます。

制限事項

  • カスタム エラー レスポンスは、グローバル外部アプリケーション ロードバランサでのみサポートされています。リージョン モードと従来モードはサポートされていません。

  • カスタム エラー オブジェクトをエラーサービスから取得できない場合(コンテンツパスが正しく構成されていない場合など)は、ブランド化されていない一般的なエラー オブジェクトが返されます。

  • カスタム エラー レスポンス ポリシーは、セキュリティ リスクについてエラーサービスから返されたオブジェクトのモニタリングやフィルタリングを行いません。したがって、脆弱性を排除し、漏えいの影響を最小限に抑える必要があります。

  • カスタム エラー レスポンスは、一般公開で読み取り可能な Cloud Storage バケットでのみサポートされます。

    Cloud Storage バケットの使用時の構成ミスを防ぐには、Cloud Storage の一般的なベスト プラクティスをご覧ください。

料金

カスタム エラー レスポンスの使用に追加料金はかかりません。Google Cloud Load Balancing に標準料金が適用されます。詳細は、料金をご覧ください。

次のステップ