針對 Azure 應用程式閘道工作階段親和性問題進行疑難排解

了解如何診斷並解決 Azure 應用程式閘道的工作階段親和性問題。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

概觀

Cookie 型工作階段親和性功能有助於將使用者工作階段保留在同一伺服器上。 使用受閘道管理的 Cookie,應用程式閘道即可將來自使用者工作階段的後續流量導向至同一部伺服器進行處理。 當使用者工作階段的工作階段狀態儲存在伺服器本機時,這項功能很重要。 工作階段親和性也稱為黏性工作階段。

注意

應用程式閘道 v1 會發出稱為 ARRAffinity 的 Cookie,用來將流量導向至相同的後端集區成員。 在應用程式閘道 v2 中,此 Cookie 已重新命名為 ApplicationGatewayAffinity。 基於本文件的目的,ApplicationGatewayAffinity 將作為範例使用,如果適用的話,應用程式閘道 v1 執行個體可以取代 ARRAffinity。

可能的問題原因

維護 Cookie 型工作階段親和性的問題可能會由於下列主要原因而發生:

  • [Cookie 型親和性] 設定未啟用
  • 您的應用程式無法處理 Cookie 型親和性
  • 應用程式正在使用 Cookie 型親和性,但要求仍在後端伺服器之間來回傳送

有時候當您忘記啟用 [Cookie 型親和性] 設定時,可能會發生工作階段親和性問題。 若要判斷您是否已在 Azure 入口網站 的 [HTTP 設定] 索引標籤上啟用 [Cookie 型親和性] 設定,請遵循下列指示:

  1. 登入 Azure 入口網站

  2. 在 [左瀏覽] 窗格中,按一下 [所有資源]。 按一下 [所有資源] 刀鋒視窗中的應用程式閘道名稱。 如果您選取的訂用帳戶中已有數個資源,您可以在 [依名稱篩選...] 方塊中輸入您的應用程式閘道名稱,以輕鬆存取應用程式閘道。

  3. 選取 [設定] 底下的 [HTTP 設定] 索引標籤。

    Screenshot shows SETTINGS with H T T P settings selected.

  4. 選取 HTTP 設定,然後在 [新增 HTTP 設定] 頁面上,檢查是否已啟用 [Cookie 型親和性]

    Screenshot shows the gateway settings for an app gateway, including whether Cookie based affinity is selected.

您也可以使用下列其中一種方法,在 "backendHttpSettingsCollection" 底下檢查 "CookieBasedAffinity" 的值是否已設定為 Enabled

"cookieBasedAffinity": "Enabled", 

原因

應用程式閘道只能使用 Cookie 來執行工作階段型親和性。

因應措施

如果應用程式無法處理 Cookie 型親和性,您必須使用外部或內部 Azure 負載平衡器或另一個協力廠商解決方案。

徵兆

您已啟用 Cookie 型親和性設定。當您在 Internet Explorer 中使用簡短名稱 URL (例如,http://website) 來存取應用程式閘道時,要求仍會在後端伺服器之間來回傳送。

若要識別此問題,請遵循下列指示:

  1. 在「用戶端」上採取 Web 偵錯工具追蹤,此用戶端將要連線到應用程式閘道後方的應用程式 (在此範例中,我們使用 Fiddler)。 秘訣 如果您不知道如何使用 Fiddler,請核取底部的 [我想要收集網路流量並使用 Web 偵錯工具進行分析] 選項。

  2. 檢查並分析工作階段記錄,以判斷用戶端提供的 Cookie 是否具有 ApplicationGatewayAffinity 詳細資料。 如果您在 Cookie 集合內找不到 ApplicationGatewayAffinity 詳細資料,例如 "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue",這表示用戶端不會以應用程式閘道提供的 ApplicationGatewayAffinity Cookie 回覆。 例如:

    Screenshot shows a session log with a single entry highlighted.

    Screenshot shows request headers for H T T P, including cookie information.

應用程式會繼續嘗試在每個要求上設定 Cookie,直到其得到回覆為止。

原因

發生此問題的原因是 Internet Explorer 和其他瀏覽器可能無法儲存或使用具有簡短名稱 URL 的 Cookie。

解決方法

若要修正此問題,建議使用 FQDN 來存取應用程式閘道。 例如,使用 http://website.comhttp://appgw.website.com

要疑難排解的其他記錄

您可以收集其他記錄並加以分析,以針對 Cookie 型工作階段親和性相關問題進行疑難排解

分析 Azure 應用程式閘道記錄

若要收集應用程式閘道記錄,請遵循下列指示:

使用 Azure 入口網站啟用記錄。

  1. Azure 入口網站中,尋找您的資源,然後按一下 [診斷設定]

    針對應用程式閘道,有三個記錄可供使用:存取記錄、效能記錄和防火牆記錄。

  2. 若要開始收集資料,請選取 [新增診斷設定]

    Screenshot shows an application gateway with Diagnostics settings selected.

  3. [診斷設定] 頁面中提供診斷記錄的設定。 在此範例中,Log Analytics 會儲存記錄。 您也可以使用事件中樞和儲存體帳戶來儲存診斷記錄。

    Screenshot shows the Diagnostics settings pane with Log Analytics Configure selected.

  4. 確認設定,然後選取 [儲存]

使用 Web 偵錯工具來擷取並分析 HTTP 或 HTTPS 流量

Fiddler 之類的 Web 偵錯工具可協助您藉由擷取網際網路與測試電腦之間的網路流量來偵錯 Web 應用程式。 這些工具可讓您在瀏覽器接收/傳送傳入和傳出資料時檢查該資料。 在此範例中,Fiddler 具有 HTTP 重新播放選項,可協助您針對 Web 應用程式的用戶端問題進行疑難排解,特別是針對驗證類型的問題。

使用您選擇的 Web 偵錯工具。 在此範例中,我們將使用 Fiddler 來擷取並分析 http 或 https 流量。請遵循下列指示:

  1. 下載 Fiddler

    注意

    如果擷取電腦已安裝 .NET 4,請選擇 Fiddler4。 否則,選擇 Fiddler2。

  2. 以滑鼠右鍵按一下安裝程式可執行檔,然後以系統管理員身分執行安裝。

    Screenshot shows the Fiddler setup program with a contextual menu with Run as administrator selected.

  3. 當您開啟 Fiddler 時,其應該會自動開始擷取流量 (請注意左下角的 [擷取中])。 按 F12 以啟動或停止流量擷取。

    Screenshot shows the Fiddler Web Debugger with the Capturing indicator highlighted.

  4. 您最有可能對解密的 HTTPS 流量感興趣,而且您可以選取 [工具]>[Fiddler 選項] 來啟用 HTTPS 解密,然後核取 [解密 HTTPS 流量] 方塊。

    Screenshot shows Options in Fiddler with H T T P selected and Decrypt HTTPS traffic selected.

  5. 您可以按一下 [X] (圖示) > [全部移除] 來移除先前的不相關工作階段,如下列螢幕擷取畫面所示:

    Screenshot shows the X icon selected, which displays the Remove all option.

  6. 一旦您重現了問題,請選取 [檔案]>[儲存]>[所有工作階段],以儲存檔案進行檢閱。

    Screenshot shows the File Save All Sessions option selected.

  7. 檢查並分析工作階段記錄,以判斷發生什麼問題。

    例如:

  • 範例 A:您會發現要求從用戶端傳送的工作階段記錄,而且其會移至應用程式閘道的公用 IP 位址。請按一下此記錄以檢視詳細資料。 在右側,底部方塊中的資料是應用程式閘道傳回用戶端的內容。 選取 [RAW] 索引標籤,並判斷用戶端是否收到 “Set-Cookie:ApplicationGatewayAffinity=ApplicationGatewayAffinityValue”。如果沒有 Cookie,即代表未設定工作階段親和性,或應用程式閘道未將 Cookie 套用回用戶端。

    注意

    此 ApplicationGatewayAffinity 值是應用程式閘道設定的 cookie-id,供用戶端傳送至特定的後端伺服器。

    Screenshot shows an example of details of a log entry with the Set-Cookie value highlighted.

  • 範例 B:後面接著上一個工作階段記錄的下一個工作階段記錄是用戶端回應至已設定 ApplicationGatewayAffinity 的應用程式閘道。 如果 ApplicationGatewayAffinity Cookie-id 相符,封包應該傳送至先前使用的相同後端伺服器。 檢查下面幾行的 HTTP 通訊,以查看用戶端的 ApplicationGatewayAffinity Cookie 是否正在變更。

    Screenshot shows an example of details of a log entry with a cookie highlighted.

注意

針對相同的通訊工作階段,Cookie 不應該變更。 核取右側的頂端方塊,選取 [Cookie] 索引標籤,以查看用戶端是否正在使用 Cookie,並將其傳回至應用程式閘道。 若否,則用戶端瀏覽器不會保留並使用 Cookie 進行交談。 有時候,用戶端可能會說謊。

下一步

如果上述步驟無法解決問題,請開啟 支援票證