次の方法で共有


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

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

注意

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

概要

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

Note

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

考えられる問題の原因

Cookie ベースのセッション アフィニティの維持に関する問題が発生する主な原因には以下のものがあります。

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

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

  1. Azure Portal にログオンします。

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

  3. [設定] の下で [HTTP 設定] タブを選択します。

    [設定] のスクリーンショット。[HTTP 設定] が選択されています。

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

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

次の方法のいずれかを使用して、「backendHttpSettingsCollection」の下で「CookieBasedAffinity」の値が [有効] に設定されているかどうかも調べられます。

"cookieBasedAffinity": "Enabled", 

原因

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

回避策

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

症状

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

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

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

  2. セッション ログを調べて分析し、クライアントから提供された Cookie に ApplicationGatewayAffinity 詳細があるかどうかを判断します。 Cookie セット内に "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" などの ARRAffinity 詳細が見つからない場合、クライアントが、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 をダウンロードします。

    Note

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

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

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

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

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

  4. ほとんどの場合、関心があるのは復号化された HTTPS トラフィックであるので、[ツール]>[Fiddler オプション] の順に選択し、[Decrypt HTTPS traffic](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 がクライアントに適用されていません。

    Note

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

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

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

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

Note

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

次のステップ

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