次の方法で共有


Application Gateway のカスタム エラー ページを作成する

Application Gateway を使用すると、既定のエラー ページを表示する代わりに、カスタマイズされたエラー ページを作成できます。 さまざまな応答コードに関連するエラーに対して、ブランド化とレイアウトを使用できます。 カスタム エラー ページを設定するシナリオには

  • 502 Bad Gateway 応答コードの メンテナンスまたは状態ページを表示しています。 これは、スケジュールされたメンテナンス中にトラフィックをルーティングするバックエンド サーバーがアプリケーション ゲートウェイに存在しない場合や、バックエンド プール サーバーで予期しない問題が発生した場合に便利です。
  • WAF が防止モードで、悪意のあるトラフィックをブロックするときに発生する 403 Forbidden 応答コードのカスタマイズされた 未承認アクセス ページ を表示します。
  • 問題が発生した場合の連絡先の詳細を含む会社ブランドのページを表示します。

サポートされている応答コード

カスタム エラー ページは、次の応答コードでサポートされています:

応答コード 説明
400 要求が正しくありません
403 許可されていません
405 メソッドは許可されていません
408 要求タイムアウト
500 サーバー内部エラー
502 無効なゲートウェイ
503 サービスを利用できない
504 ゲートウェイ タイムアウト

Note

Azure Blob Storage でカスタム エラー ページをホストしている場合は、Application Gateway がページをフェッチできるように、ストレージ アカウントにインターネット (パブリック アクセス) から直接アクセスできる必要があります。 カスタム エラー ページは、ストレージ アカウントの前にある CDN エンドポイントから提供できません。Application Gateway では現在、CDN URL からのエラー ページのフェッチはサポートされていません。 ストレージ アカウントで CDN を使用している場合は、Application Gateway が CDN 経由だけでなく、ストレージ アカウントに直接アクセスできることを確認します。

  • API バージョン 2022-09-01 以降を使用して、使用可能なすべての応答コードのエラー ページを構成する必要があります。
  • 応答コード 404 (ページが見つかりません) は現在サポートされていません。
  • Application Gateway によって生成された応答コードのカスタム エラー ページが表示されます。 バックエンド サーバーから発生したエラーは、そのままクライアントに渡されます。

構成レベル

カスタム エラー ページは、グローバル レベルまたはリスナー レベルで定義できます:

  • グローバル レベル - グローバル レベルで設定されたエラー ページは、そのアプリケーション ゲートウェイのすべてのリスナーに適用されます。 Azure portal を使用した構成は現在サポートされていません。
  • リスナー レベル - リスナー レベルのエラー ページを使用すると、そのリスナーによって提供されるアプリケーションのエラー ページを細かく制御できます。

Note

ゲートウェイにグローバル レベルのエラー ページとリスナー レベルのエラー ページを組み合わせて使用する場合は、そのリスナーに必要なすべての応答コードの URL を明示的にメンションする必要があります。 リスナー固有の構成は、そのリスナーに適用できる前述のグローバル構成をすべてオーバーライドします。

必要条件

カスタム エラー ページを作成するには

  • カスタム エラー ページが必要な応答コードを認識します。
  • HTML ページの対応するリモートの場所 (URL) を認識します。 これは、パブリックにアクセス可能なファイルである必要があります。
  • エラー ページがパブリックにアクセス可能であることを確認し、200 応答を返します。
  • エラー ページが *.htm または *.html 拡張型であることを確認します。
  • ページ サイズが 1 MB 未満であることを確認します。
  • Azure BLOB ストレージ アカウントを使用する場合は、ネットワーク アクセス設定が "すべてのネットワークから有効" に設定されていることを確認します。

この HTML ファイルには、内部または外部のイメージ/CSS を参照できます。 外部から参照されるリソースには、パブリック アクセスできる絶対 URL を使用します。 base64 でエンコードされたインライン イメージ、JavaScript、または CSS を使用する場合は、HTML ファイルのサイズに注意してください。

Note

  • Azure エコシステム内では、エラー ページをホストするために Azure Blob Storage アカウントまたは仮想マシンを使用する必要があります。 現在、Azure CDN サービスによってフロントされたストレージ アカウントはサポートされていないため、Blob ストレージには直接アクセスできる必要があります。
  • また、エラー ページをリモートの任意の場所でホストすることもできます。
  • 相対リンクはサポートされていません。

しくみ

アプリケーション ゲートウェイの構成でエラー ページを指定すると、ゲートウェイはインターネット経由で HTML ページへの接続を確認します。 その後、ローカル キャッシュにファイルをダウンロードします。

クライアントがエラーに直面すると、アプリケーション ゲートウェイは応答コードとその HTML ページを返します。 外部から参照されるすべてのリソース (イメージ、JavaScript、CSS ファイルなど) は、クライアントによって直接フェッチされます。

アプリケーション ゲートウェイは、新しいバージョンをフェッチするためにソース ファイルの場所を定期的にチェックしません。 ゲートウェイで任意の構成更新を実行して、ファイルのキャッシュを手動で更新できます。 たとえば、エラー URL をページ 1 からページ 2 に変更してから、ページ 1 に戻したり、新しいリスナーを追加したりします。

ポータル構成

リスナー固有のカスタム エラー ページを構成する手順:

  1. ポータルで Application Gateway に移動し、必要なリソースを選択します。

  2. リスナー を選択し、エラー ページを指定する特定のリスナーに移動します。

  3. カスタム エラー ページ セクションで、必要な状態コードにパブリックにアクセスできる URL を指定します。

  4. [保存] を選択します。

    Application Gateway のカスタム エラー ページのスクリーンショット。

Azure PowerShell 構成

Azure PowerShell を使用して、カスタム エラー ページを構成できます。 たとえば、グローバル カスタム エラー ページは次のようになります。

$appgw   = Get-AzApplicationGateway -Name <app-gateway-name> -ResourceGroupName <resource-group-name>

$updatedgateway = Add-AzApplicationGatewayCustomError -ApplicationGateway $appgw -StatusCode HttpStatus502 -CustomErrorPageUrl "http://<website-url>"

Set-AzApplicationGateway -ApplicationGateway $appgw

また、リスナー レベルのエラー ページは次のようになります。

$appgw   = Get-AzApplicationGateway -Name <app-gateway-name> -ResourceGroupName <resource-group-name>

$listener01 = Get-AzApplicationGatewayHttpListener -Name <listener-name> -ApplicationGateway $appgw

$updatedlistener = Add-AzApplicationGatewayHttpListenerCustomError -HttpListener $listener01 -StatusCode HttpStatus502 -CustomErrorPageUrl "http://<website-url>"

Set-AzApplicationGateway -ApplicationGateway $appgw

詳しくは、「Add-AzApplicationGatewayCustomError」および「Add-AzApplicationGatewayHttpListenerCustomError」をご覧ください。

次のステップ

Application Gateway 診断の詳細については、「Application Gateway のバックエンドの正常性、診断ログ、およびメトリック」を参照してください。