HTTP 要求または応答の処理を妨げるエラーが発生すると、NSX Advanced Load Balancer は状態コードを含む一般的なエラー メッセージをクライアントに返します。このセクションでは、このエラー メッセージのカスタマイズについて説明します。

注:

カスタマイズされたエラー応答ページは、サーバがエラー ページを返したときに DataScript またはポリシーを使用して、NSX Advanced Load Balancer でカスタム Web ページを返す場合とは異なります。

NSX Advanced Load Balancer は、次に一覧表示する条件でエラー ページを生成します。

  • Web アプリケーション ファイアウォール (WAF) ポリシーが一致したために要求がブロックされた場合。

  • HTTP 要求または応答の解析エラー(無効な要求など)。

  • バックエンド サーバ ハンドシェイクの失敗または接続タイムアウト。

  • DataScript のロジック障害。

プールの失敗アクション

すべてのサーバがダウンし、プール サーバがページを返せない場合は、カスタム エラー ページを返すようにプールを構成できます。

[アプリケーション] > [プール] の順に移動して、[編集] をクリックして、プールを編集します。[詳細] タブの [プール障害の設定] で、[プールの失敗アクション][HTTP ローカル応答] に設定します。目的のリターン コードを [状態コード] で設定し、オプションで [ファイルのアップロード] フィールドに HTML ファイルをアップロードします。



デフォルトでは、プールの失敗アクションは [接続の終了] に設定され、TCP リセットがクライアントに送信されます。このアクションは、HTTP 要求を受信した後、応答の前に有効になります。たとえば、クライアント要求によってトリガされた WAF セキュリティ違反が優先されます。WAF は、プールの [失敗アクション] によって送信されるページではなく、403 エラー ページを送信します。

DataScript

DataScript は、カスタム エラー メッセージをクライアントに返すために使用されます。この場合、DataScript はエラーを検出する必要があります。

カスタム エラー ページの DataScript は、RESP_FAILED イベントによってトリガされます。これは、NSX Advanced Load Balancer がトランザクションを処理できず、クライアントにページを返せない場合に発生します。

注:

このイベントは、NSX Advanced Load Balancer がエラーを生成した場合にのみ実行されます。

503(サービスを利用できません)応答の場合と同様に、サーバによってエラーが生成された場合、DataScript は HTTP_RESP イベントを使用してサーバから返されたページを上書きする必要があります。avi.http.internal_status() 関数は、このエラーの理由を返します。この情報は、返されるカスタム エラー ページに組み込まれています。その後、カスタム HTML を avi.http.response() 関数に組み込んで、応答がクライアントに送信されます。または、avi.http.redirect() を介して HTTP リダイレクトを使用することもできます。

-- RESP_FAILED
status = avi.http.internal_status()
html = "Your request could not be completed. Please contact support."

if status then html = html .. " Reason: " .. status end
html = html .. ""
avi.http.response(503, {content_type="text/html"}, html)

エラー ページ プロファイル

NSX Advanced Load Balancer で 1 つ以上のカスタム エラー ページを構成できます。[テンプレート] > [エラー ページ] > [エラー ページ プロファイル] の順に移動し、[作成] をクリックします。



これらのページは、エラー ページの本文で定義される単純な HTML ページです。エラー ページ プロファイルは、複数のエラー ページの本文をポイントします。各エラー ページ プロファイルが異なる HTTP 状態コードまたは一定範囲の状態コードに関連付けられていることを確認します。

カスタム トークンまたは変数は、NSX Advanced Load Balancer によって生成される動的データで、返されたページに挿入できます。これらの変数は、前後にスペースを挿入して区切る必要があります。NSX Advanced Load Balancer パーサーは、エラー ページの HTML に含まれる他の文字列 ($) 文字を却下します。使用可能な変数は次のとおりです。

  • $status – NSX Advanced Load Balancer がクライアントに返す状態コードを返します。

  • $request_id – NSX Advanced Load Balancer が特定の要求または応答に割り当てる一意の識別子を返します。この識別子はログにも含められます。この識別子がクライアントに返されると、特定のトランザクションをログで特定して、エラーの理由を見つけることができます。一般的な使用事例は WAF の場合で、広範な違反に対するクライアント要求をブロックできます。ログ内の要求 ID を見つけることで、管理者は、ブロックされた要求または WAF シグネチャを今後の要求でブロックから除外する必要があるかどうかを検証できます。

  • $vs_name – 仮想サービスの名前を返します。この名前は、接続されている FQDN クライアントとは異なる場合があります。



スタイル シート、JavaScript、または base64 でエンコードされたイメージは、堅牢なエラー ページのインライン オブジェクトとして単一の HTML ファイル内に埋め込むことができます。または、HTML ページには、これらの追加オブジェクトを取得するための別のサイトへのリンクを含めることができます。

カスタム エラー ページ プロファイル

すべての仮想サービスには、NSX Advanced Load Balancer で生成された 4xx および 5xx エラーのユーザー定義 HTML エラー ページ (Custom-Error-Page-Profile) があります。

必要に応じて、特定のエラー ページ プロファイルとページを更新または追加できます。

Custom-Error-Page (HTML) はコントローラにパッケージ化されています。このページのサイズは約 4 KB です。

注:

Custom-Error-Page-Profile は現在、エンタープライズ ライセンス階層でのみ使用できます。

カスタム エラー ページ プロファイルを編集するには、次の手順を実行します。

  1. NSX Advanced Load Balancer ユーザー インターフェイスから、 [テンプレート] > [エラー ページ] > [エラー ページ プロファイル] > [Custom-Error-Page-Profile] の順に移動します。

  2. [編集] ボタンをクリックします。

  3. [エラー ページ プロファイルの編集] サブ画面で、custom-error-page をポイントすると、削除アイコンと編集アイコンが使用可能になります。[編集] アイコンをクリックして、エラー ページの本文を変更します。

  4. [カスタム エラー ページ] の 3 つの点線をクリックし [編集] アイコンをクリックします。



  5. ページの本文には、ロゴ、応答コード、アプリケーション名、および要求 ID がデフォルトで定義されています。必要に応じて HTML コンテンツを編集します。



  6. [保存] をクリックして変更内容を更新します。

デフォルトのカスタム エラー ページが次のように表示されます。



このページの行のコメントを解除して、要求 ID と仮想サービス名を取得します:<! -- Please contact our technical support with Request ID: $request_id and Application Name: $vs_name -->                 仮想サービスは、デフォルトで Custom-Error-Page-Profile を参照します。



JSON エラー ページの表示

HTML ではなく JSON 形式でエラー ページを返すことができます。現時点では、構成は CLI でのみサポートされます。3 つの主要な手順を次に示します。

  1. configure コマンドを使用して、エラー ページの本文を作成します。

    [admin:10-10-26-45]: > configure errorpagebody Json-Error-Page-Body
    [admin:10-10-26-45]: errorpagebody> format error_page_format_json
    [admin:10-10-26-45]: errorpagebody> error_page_body --
    Please input the value for field error_page_body (Enter END to terminate input):"{ \"request_id\":\" $request_id \", \"application_name\":\" $vs_name \", \"status_code\":\" $status \" }"
    END
    [admin:10-10-26-45]: errorpagebody> save
    +-----------------+----------------------------------------------------------------------------------+
    | Field           | Value                                                                            |
    +-----------------+----------------------------------------------------------------------------------+
    | uuid            | errorpagebody-6a0ee492-30bc-41fc-8105-ec6166f7ae04                               |
    | name            | Json-Error-Page-Body                                                             |
    | tenant_ref      | admin                                                                            |
    | error_page_body | "{ \"request_id\":\" $request_id \", \"application_name\":\" $vs_name \", \"stat |
    |                 | us_code\":\" $status \" }"                                                       |
    | format          | ERROR_PAGE_FORMAT_JSON                                                           |
    +-----------------+----------------------------------------------------------------------------------+
  2. エラー ページ プロファイルの作成:以下に、エラー ページの本文を参照し、クライアントへの戻り値をトリガする状態コードに関連付けるエラー ページ プロファイルの作成を示します。

    [admin:10-10-26-45]: > configure errorpageprofile Json-Error-Profile
    [admin:10-10-26-45]: errorpageprofile> error_pages index 0
    New object being created
    [admin:10-10-26-45]: errorpageprofile:error_pages> enable
    [admin:10-10-26-45]: errorpageprofile:error_pages> match match_criteria is_in status_codes 503
    [admin:10-10-26-45]: errorpageprofile:error_pages:match> save
    [admin:10-10-26-45]: errorpageprofile:error_pages> error_page_body_ref Json-Error-Page-Body
    [admin:10-10-26-45]: errorpageprofile:error_pages> save
    [admin:10-10-26-45]: errorpageprofile> save
    +-----------------------+-------------------------------------------------------+
    | Field                 | Value                                                 |
    +-----------------------+-------------------------------------------------------+
    | uuid                  | errorpageprofile-f8381196-ab7e-4716-96c6-ad99db8beb41 |
    | name                  | Json-Error-Profile                                    |
    | tenant_ref            | admin                                                 |
    | error_pages[1]        |                                                       |
    |   index               | 0                                                     |
    |   enable              | True                                                  |
    |   match               |                                                       |
    |     match_criteria    | IS_IN                                                 |
    |     status_codes[1]   | 503                                                   |
    |   error_page_body_ref | Json-Error-Page-Body                                  |
    +-----------------------+-------------------------------------------------------+
    [admin:10-10-26-45]: >
  3. 仮想サービスのエラー ページ プロファイルへの関連付け:仮想サービスの名前が MyVS であると想定します。1 つの CLI コマンドで、仮想サービスとエラー プロファイルの関連付けを行うことができます。

    [admin:10-10-26-45]: > configure virtualservice MyVS error_page_profile_ref Json-Error-Profile