共用方式為


針對 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 設定] 索引標籤。

    顯示已選取 H T T P 設定的 [設定] 螢幕快照。

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

    此螢幕快照顯示應用程式閘道的閘道設定,包括是否選取 Cookie 型親和性。

您也可以使用下列其中一種方法,在 "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。 例如:

    顯示會話記錄的螢幕快照,其中已醒目提示單一專案。

    此螢幕快照顯示 H T T P 的要求標頭,包括 Cookie 資訊。

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

原因

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

解決方法

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

要疑難排解的其他記錄

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

分析 Azure 應用程式閘道記錄

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

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

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

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

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

    此螢幕快照顯示已選取 [診斷] 設定的應用程式閘道。

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

    顯示 [診斷設定] 窗格的螢幕快照,並已選取 [Log Analytics 設定]。

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

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

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

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

  1. 下載 Fiddler

    注意

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

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

    顯示 Fiddler 安裝程式的螢幕快照,其中包含已選取 [以系統管理員身分執行] 的內容功能表。

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

    顯示 Fiddler Web 調試程式的螢幕快照,其中已醒目提示 [擷取] 指標。

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

    此螢幕快照顯示 Fiddler 中已選取 H T T P 和解密 HTTPS 流量的選項。

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

    螢幕快照顯示已選取的 X 圖示,其中顯示 [全部移除] 選項。

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

    顯示已選取 [檔案儲存所有工作階段] 選項的螢幕快照。

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

    例如:

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

    注意

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

    此螢幕快照顯示已醒目提示 Set-Cookie 值之記錄專案詳細數據的範例。

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

    此螢幕快照顯示已醒目提示 Cookie 之記錄專案詳細數據的範例。

注意

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

下一步

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