次の方法で共有


Azure Application Gateway のセッション アフィニティに関する問題をトラブルシューティングする

Azure Application Gateway のセッション アフィニティに関する問題を診断および解決する方法について説明します。

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

概要

Cookie ベースのセッション アフィニティ機能は、同じサーバー上にユーザー セッションを保持するために便利です。 ゲートウェイで管理される Cookie を使用すると、Application Gateway は、ユーザー セッションの後続のトラフィックを、処理のために同じサーバーに送ることができます。 この機能は、ユーザー セッションのためにセッションの状態をサーバー上でローカルに保存する場合に重要です。 セッション アフィニティは、スティッキー セッションとも呼ばれます。

注意

Application Gateway v1 は ARRAffinity というクッキーを発行します。これは、同じバックエンド プール メンバーにトラフィックを送信するために使用されます。 Application Gateway v2 では、この Cookie の名前が ApplicationGatewayAffinity に変更されました。 このドキュメントでは、ApplicationGatewayAffinity を例として使用します。ARRAffinity は、Application Gateway v1 インスタンスに該当する場合に置き換えることができます。

考えられる問題の原因

Cookie ベースのセッション アフィニティを維持する場合の問題は、次の主な理由によって発生する可能性があります。

  • "Cookie ベースのアフィニティ" 設定が有効になっていません
  • アプリケーションで Cookie ベースのアフィニティを処理できない
  • アプリケーションが Cookie ベースのアフィニティを使用しているが、要求がバックエンド サーバー間でまだバウンスしている

「Cookie ベースのアフィニティ」設定を有効にし忘れたときに、セッション アフィニティに関する問題が発生することがあります。 Azure portal の [バックエンド設定] タブで [Cookie ベースのアフィニティ] 設定を有効にしたかどうかを確認するには、次の手順に従います。

  1. Azure portal にサインインします。

  2. 左側の ナビゲーション ウィンドウで、[ すべてのリソース] を選択します。 [すべてのリソース] ブレードでアプリケーション ゲートウェイ名を選択します。 選択したサブスクリプションに既存のリソースがいくつかある場合は、[名前でフィルター] ボックスにアプリケーション ゲートウェイの名前を入力すると、アプリケーション ゲートウェイに簡単にアクセスできます。

  3. [設定] の [バックエンド設定] タブを選択します。

    [バックエンド設定] が選択された [設定画面] を示すスクリーンショット。

  4. バックエンド設定を選択し、[ バックエンド設定の追加] ページで、 Cookie ベースのアフィニティ が有効になっているかどうかを確認します。

    アプリ ゲートウェイのゲートウェイ設定のスクリーンショット。[Cookie ベースのアフィニティ] が選択されているかどうかなどが示されています。

次のいずれかの方法を使用して、"CookieBasedAffinity" の値が "backendHttpSettingsCollection" で Enabled に設定されていることを確認することもできます。

"cookieBasedAffinity": "Enabled", 

原因

アプリケーション ゲートウェイは、Cookie を使用することによってのみ、セッション ベースのアフィニティを実行できます。

回避策

アプリケーションが Cookie ベースのアフィニティを処理できない場合は、外部または内部の Azure ロード バランサーまたは別のサードパーティ ソリューションを使用する必要があります。

症状

Cookie ベースのアフィニティ設定を有効にした場合、Internet Explorer で短い名前の URL を使用して Application Gateway にアクセスすると(例: http://website )、バックエンド サーバー間で要求がバウンスしています。

この問題を特定するには、次の手順に従います。

  1. Application Gateway の背後にあるアプリケーションに接続している "クライアント" で Web デバッガー トレースを取得します (この例では Fiddler を使用しています)。 ヒント: Fiddler を使用する方法がわからない場合は、下部にある [I want to collect network traffic and analyze it using web debugger](ネットワーク トラフィックを収集し、Web デバッガーを使用して分析する) オプションをオンにします。

  2. セッション ログを調べて分析し、クライアントから提供された Cookie に ApplicationGatewayAffinity 詳細があるかどうかを判断します。 Cookie セット内に ApplicationGatewayAffinity=ApplicationGatewayAffinityValue などの ApplicationGatewayAffinity の詳細が見つからない場合は、クライアントが Application Gateway によって提供される ApplicationGatewayAffinity Cookie で応答していないことを意味します。 次に例を示します。

    セッション ログのスクリーンショット。エンティティが 1 つ強調表示されています。

    Cookie 情報を含む、HTTP の要求ヘッダーのスクリーンショット。

アプリケーションは、応答を取得するまで、要求ごとに Cookie を設定しようとし続けます。

原因

Internet Explorer や他のブラウザーが、短縮名 URL で Cookie を格納することも使用することもできないので、この問題が発生します。

解決方法

この問題を解決するには、完全修飾ドメイン名 (FQDN) を使用して Application Gateway にアクセスする必要があります。 たとえば、http://website.com または http://appgw.website.com を使用します。

トラブルシューティングのためのその他のログ

その他のログを収集して分析することで、それらの Cookie ベースのセッション アフィニティに関連した問題をトラブルシューティングできます

Application Gateway のログの解析

Application Gateway のログを収集するには、次の手順に従います。

Azure portal を使用してログを有効にします。

  1. Azure portal で、ご使用のリソースを見つけ、[診断設定] を選択します。

    Application Gateway では、3 つのログ (アクセス ログ、パフォーマンス ログ、ファイアウォール ログ) を使用できます。

  2. データの収集を開始するには、[診断設定の追加] を選択します。

    アプリケーション ゲートウェイのスクリーンショット。診断設定が選択されています。

  3. [診断設定] ページには、診断ログの設定が用意されています。 この例では、Log Analytics を使用してログを保存します。 イベント ハブとストレージ アカウントを使用して診断ログを保存することもできます。

    [診断設定] ウィンドウのスクリーンショット。Log Analytics の [構成] が選択されています。

  4. 設定を確認し、[保存] を選択します。

Web デバッガーを使用して HTTP または HTTPS トラフィックをキャプチャおよび分析する

Fiddler などの Web デバッグ ツールは、インターネットとテスト コンピューターの間のネットワーク トラフィックをキャプチャすることで、Web アプリケーションをデバッグするのに役立ちます。 これらのツールを使用すると、着信および送信データを、ブラウザーが受信/送信するときに検査できます。 この例の Fiddler には、特に認証の問題に関して、Web アプリケーションに関するクライアント側の問題のトラブルシューティングに役立つ HTTP 再生オプションがあります。

任意の Web デバッガーを使用してください。 このサンプルでは、Fiddler を使用して http または https トラフィックをキャプチャして分析します。手順に従います。

  1. Fiddler をダウンロードします。

    注意

    キャプチャ側のコンピューターに .NET 4 がインストールされている場合は、Fiddler4 を選択します。 それ以外の場合は、Fiddler2 を選択します。

  2. セットアップ実行可能ファイルを右クリックし、管理者として実行しインストールします。

    Fiddler セットアップ プログラムのスクリーンショット。コンテキスト メニューで [管理者として実行] が選択されています。

  3. Fiddler を開くと、Fiddler はトラフィックのキャプチャを自動的に開始します (左下にある [キャプチャ] に注目してください)。 F12 キーを押して、トラフィックのキャプチャを開始または停止します。

    Fiddler Web Debugger のスクリーンショット。[キャプチャ] インジケーターが強調表示されています。

  4. 多くの場合、復号化された HTTPS トラフィックに関心があり、[ツール]>、[Fiddler オプション] の順に選択して HTTPS 復号化を有効にし、[HTTPS トラフィックの暗号化解除] チェック ボックスをオンにします。

    Fiddler オプションのスクリーンショット。HTTPS と [Decrypt HTTPS traffic] (HTTPS トラフィックの復号化) が選択されています。

  5. 次オンスクリーンショットに従って、[X] (アイコン) >[すべて削除] をクリックすることで、関連付けられていない以前のセッションを削除してから、問題を再現することができます。

    X アイコンが選択されている画面のスクリーンショット。[すべて削除] オプションが表示されています。

  6. 問題を再現したら、[ファイル>>.] を選択して、確認のためにファイルを保存します。

    [ファイル]、[保存]、[すべてのセッション] オプションを選択した画面のスクリーンショット。

  7. セッション ログを確認および分析して、問題を特定します。

    次に例を示します。

  • 例 A: クライアントから要求が送信され、Application Gateway のパブリック IP アドレスに送信されるセッション ログが見つかると、このログを選択して詳細を表示します。 右側の下部のボックスのデータは、Application Gateway がクライアントに返しているものです。 [RAW] タブを選択し、"Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" をクライアントが受信しているかどうか判断します。Cookie がない場合は、セッション アフィニティが設定されていないか、Application Gateway が Cookie をクライアントに適用していません。

    注意

    この ApplicationGatewayAffinity 値は cookie-id です。Application Gateway はクライアントに対してこの値を設定し、特定のバックエンド サーバーに送信されるようにします。

    ログ エントリの詳細例のスクリーンショット。Set-Cookie 値が強調表示されています。

  • Example B: 前のセッション ログが続く次のセッション ログは、Application Gateway に応答するクライアントであり、ApplicationGatewayAffinity を設定しました。 ApplicationGatewayAffinity cookie-id が一致した場合、パケットは、以前に使用された同じバックエンド サーバーに送信されます。 HTTP 通信の次の数行を調べて、クライアントの ApplicationGatewayAffinity Cookie が変更されているかどうかを確認します。

    ログ エントリの詳細例のスクリーンショット。Cookie が強調表示されています。

注意

同じ通信セッションでは、Cookie を変更しないでください。 右側にある上部のチェック ボックスをオンにして、[Cookies] タブを選択して、クライアントが Cookie を使用し Application Gateway に送信しているかどうかを確認します。 そうでない場合、クライアントのブラウザーは会話で Cookie を保持しておらず使用していません。 クライアントは嘘をつくことがあります。

次のステップ

前の手順で問題を解決できない場合は、サポート チケットを開きます。