Freigeben über


Behandeln von Problemen mit der Azure Application Gateway-Sitzungsaffinität

Erfahren Sie, wie Sie Probleme mit der Sitzungsaffinität in Azure Application Gateway diagnostizieren und beheben.

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Überblick

Das Feature „Cookiebasierte Sitzungsaffinität“ ist hilfreich, wenn eine Benutzersitzung auf dem gleichen Server bleiben soll. Mithilfe von durch das Gateway verwalteten Cookies kann Application Gateway weiteren Datenverkehr einer Benutzersitzung zur Verarbeitung an den gleichen Server weiterleiten. Dies ist hilfreich, wenn der Sitzungsstatus für eine Benutzersitzung lokal auf dem Server gespeichert wird. Die Sitzungsaffinität wird auch als Sticky Sessions bezeichnet.

Hinweis

Application Gateway v1 gibt ein Cookie namens ARRAffinity aus, das verwendet wird, um Datenverkehr an dasselbe Back-End-Poolmitglied weiter zu senden. In Application Gateway v2 wurde dieses Cookie in ApplicationGatewayAffinity umbenannt. Für die Zwecke dieses Dokuments wird ApplicationGatewayAffinity als Beispiel verwendet, ARRAffinity kann gegebenenfalls für Anwendungsgateway v1-Instanzen ersetzt werden.

Mögliche Problemursachen

Das Problem bei der Aufrechterhaltung der cookiebasierten Sitzungsaffinität kann aufgrund der folgenden Hauptgründe auftreten:

  • Die Einstellung "Cookiebasierte Affinität" ist nicht aktiviert.
  • Ihre Anwendung kann cookiebasierte Affinität nicht verarbeiten
  • Anwendung verwendet cookiebasierte Affinität, Anforderungen werden dennoch zwischen Back-End-Servern weitergeleitet

Manchmal sind die Probleme mit der Sitzungsaffinität darauf zurückzuführen, dass Sie vergessen haben, die Einstellung „Cookiebasierte Affinität“ zu aktivieren. Um festzustellen, ob Sie die Einstellung "Cookiebasierte Affinität" auf der Registerkarte "Back-End-Einstellungen" im Azure-Portal aktiviert haben, befolgen Sie die Anweisungen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im linken Navigationsbereich"Alle Ressourcen" aus. Wählen Sie den Namen des Anwendungs-Gateway im Bereich "Alle Ressourcen" aus. Falls das von Ihnen ausgewählte Abonnement bereits mehrere Ressourcen enthält, können Sie in das Feld Nach Name filtern den Namen des Anwendungsgateways eingeben, um problemlos auf das Anwendungsgateway zuzugreifen.

  3. Wählen Sie die Registerkarte " Back-End-Einstellungen " unter "EINSTELLUNGEN" aus.

    Screenshot zeigt EINSTELLUNGEN mit ausgewählten Back-End-Einstellungen.

  4. Wählen Sie die Back-End-Einstellung aus, und überprüfen Sie auf der Seite " Back-End-Einstellung hinzufügen ", ob cookiebasierte Affinität aktiviert ist.

    Screenshot: Gatewayeinstellungen für ein App-Gateway, einschließlich, ob cookiebasierte Affinität ausgewählt ist

Sie können auch den Wert von "CookieBasedAffinity" auf Enabled unter "backendHttpSettingsCollection" überprüfen, indem Sie eine der folgenden Methoden verwenden:

"cookieBasedAffinity": "Enabled", 

Ursache

Das Anwendungsgateway kann sitzungsbasierte Affinität nur unter Verwendung eines Cookies ausführen.

Problemumgehung

Wenn die Anwendung keine cookiebasierte Affinität verarbeiten kann, müssen Sie einen externen oder internen Azure-Lastenausgleich oder eine andere Drittanbieterlösung verwenden.

Symptom

Sie haben die Einstellung "Cookiebasierte Affinität" aktiviert. Wenn Sie auf das Anwendungsgateway zugreifen, indem Sie zum Beispiel eine Kurznamen-URL in Internet Explorer verwenden: http://website, wechselt die Anforderung immer noch zwischen Back-End-Servern.

Gehen Sie zum Beheben dieses Problems wie folgt vor:

  1. Erstellen Sie eine Webdebuggerablaufverfolgung für den "Client", der eine Verbindung mit der Anwendung hinter dem Anwendungsgateway herstellt(Wir verwenden Fiddler in diesem Beispiel). Tipp: Wenn Sie mit der Verwendung von Fiddler nicht vertraut sind, aktivieren Sie die Option I want to collect network traffic and analyze it using web debugger (Ich möchte Netzwerkdatenverkehr mithilfe des Webdebuggers erfassen und analysieren) am unteren Rand.

  2. Überprüfen und analysieren Sie die Sitzungsprotokolle, um zu ermitteln, ob die vom Client bereitgestellten Cookies die ApplicationGatewayAffinity-Details enthalten. Wenn Sie die ApplicationGatewayAffinity-Details nicht finden, z. B. "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" innerhalb der Cookie-Gruppe, bedeutet dies, dass der Client nicht mit dem ApplicationGatewayAffinity-Cookie antwortet, das vom Application Gateway bereitgestellt wird. Zum Beispiel:

    Ein Screenshot, der ein Sitzungsprotokoll mit einem einzelnen hervorgehobenen Eintrag zeigt.

    Ein Screenshot, der Anforderungsheader für H T T P zeigt, einschließlich Cookieinformationen.

In der Anwendung wird weiterhin versucht, das Cookie für jede Anforderung festzulegen, bis eine Antwort empfangen wird.

Ursache

Dieses Problem tritt auf, da das Cookie mit einer Kurznamen-URL in Internet Explorer und anderen Browsern möglicherweise nicht gespeichert oder verwendet wird.

Lösung

Um dieses Problem zu beheben, sollten Sie mithilfe eines vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) auf das Anwendungsgateway zugreifen. Verwenden Sie beispielsweise http://website.com oder http://appgw.website.com.

Zusätzliche Protokolle für die Problembehandlung

Sie können zusätzliche Protokolle erfassen und analysieren, um die Probleme in Bezug auf die cookiebasierte Sitzungsaffinität zu beheben.

Analysieren von Application Gateway-Protokollen

Gehen Sie zum Erfassen der Application Gateway-Protokolle wie folgt vor:

Aktivieren Sie die Protokollierung im Azure-Portal.

  1. Suchen Sie im Azure-Portal nach Ihrer Ressource, und wählen Sie dann Diagnoseeinstellung aus.

    Für Application Gateway sind drei Protokolle verfügbar: Zugriffsprotokoll, Leistungsprotokoll und Firewallprotokoll.

  2. Um mit dem Sammeln von Daten zu beginnen, wählen Sie Diagnoseeinstellung hinzufügen aus.

    Screenshot: Anwendungsgateway mit ausgewählten Diagnoseeinstellungen

  3. Auf der Seite Diagnoseeinstellung finden Sie die Einstellungen für die Diagnoseprotokolle. In diesem Beispiel werden die Protokolle in Log Analytics gespeichert. Sie können auch Event Hubs und ein Speicherkonto verwenden, um die Diagnoseprotokolle zu speichern.

    Ein Screenshot, der den Bereich „Diagnoseeinstellungen“ mit ausgewähltem „Log Analytics konfigurieren“ zeigt.

  4. Bestätigen Sie die Einstellungen, und wählen Sie Speichern aus.

Erfassen und Analysieren des HTTP- oder HTTPS-Datenverkehrs mit dem Webdebugger

Webdebuggingtools wie Fiddler können Ihnen beim Debuggen von Webanwendungen helfen, indem Netzwerkdatenverkehr zwischen dem Internet und Testcomputern erfasst wird. Mit diesen Tools können Sie eingehende und ausgehende Daten überprüfen, wenn sie im Browser empfangen oder gesendet werden. Fiddler verfügt in diesem Beispiel über die HTTP-Wiedergabeoption, mit der Sie clientseitige Probleme mit Webanwendungen beheben können, insbesondere bei Authentifizierungsproblemen.

Sie können einen Webdebugger Ihrer Wahl verwenden. In diesem Beispiel verwenden wir Fiddler, um HTTP- oder HTTPS-Datenverkehr zu erfassen und zu analysieren, befolgen Sie die Anweisungen:

  1. Laden Sie Fiddler herunter.

    Hinweis

    Wählen Sie Fiddler4 aus, wenn auf dem Computer, auf dem die Erfassung erfolgt, .NET 4 installiert ist. Wählen Sie andernfalls Fiddler2 aus.

  2. Klicken Sie mit der rechten Maustaste auf die ausführbare Setupdatei, und führen Sie die Installation als Administrator aus.

    Screenshot: Setupprogramm für Fiddler mit einem Kontextmenü, in dem „Als Administrator ausführen“ ausgewählt ist

  3. Wenn Sie Fiddler öffnen, sollte die Erfassung von Datenverkehr automatisch gestartet werden. (Beachten Sie die Option „Capturing“ (Erfassen) in der linken unteren Ecke.) Drücken Sie F12, um die Erfassung von Datenverkehr zu starten oder zu beenden.

    Ein Screenshot, der den Fiddler-Webdebugger mit hervorgehobenem Erfassungsindikator zeigt.

  4. Wahrscheinlich interessieren Sie sich für entschlüsselten HTTPS-Datenverkehr, und Sie können die HTTPS-Entschlüsselung aktivieren, indem Sie "Extras>Fiddler-Optionen" auswählen und das Kontrollkästchen " HTTPS-Datenverkehr entschlüsseln" aktivieren.

    Ein Screenshot, der „Optionen“ in Fiddler mit ausgewähltem H T T P und Datenverkehr durch „HTTPS-Datenverkehr entschlüsseln“ zeigt.

  5. Sie können vorherige nicht verknüpfte Sitzungen entfernen, bevor Sie das Problem reproduzieren, indem Sie wie im folgenden Screenshot gezeigt auf X (Symbol) >Alle entfernen klicken:

    Ein Screenshot, der das ausgewählte X-Symbol zeigt, das die Option „Alle entfernen“ anzeigt.

  6. Nachdem Sie das Problem reproduziert haben, speichern Sie die Datei zur Überprüfung, indemSie>Alle Sitzungen speichern>"..

    Ein Screenshot, der die ausgewählte „Datei“-Option „Alle Sitzungen speichern

  7. Überprüfen und analysieren Sie die Sitzungsprotokolle, um das Problem zu ermitteln.

    Beispiele:

  • Beispiel A: Sie finden ein Sitzungsprotokoll, das zeigt, dass die Anforderung vom Client gesendet wird und zur öffentlichen IP-Adresse des Anwendungsgateways geht. Wählen Sie dieses Protokoll aus, um die Details anzuzeigen. Auf der rechten Seite sind im unteren Feld die Daten aufgeführt, die das Anwendungsgateway an den Client zurückgibt. Wählen Sie die Registerkarte „RAW“ aus, um zu ermitteln, ob der Client die Rückgabe „Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue“ empfängt. Wenn kein Cookie vorhanden ist, ist die Sitzungsaffinität nicht festgelegt, oder das Anwendungsgateway sendet das Cookie nicht zurück an den Client.

    Hinweis

    Dieser ApplicationGatewayAffinity-Wert ist die Cookie-ID, die das Anwendungsgateway für den Client festlegt und die dieser an einen bestimmten Back-End-Server senden muss.

    Ein Screenshot, der ein Beispiel für Details eines Protokolleintrags mit hervorgehobenem „Set-Cookie“-Wert zeigt.

  • Beispiel B: Im nächsten Sitzungsprotokoll ist angegeben, dass der Client dem Anwendungsgateway, das den ApplicationGatewayAffinit-Wert festgelegt hat, antwortet. Wenn die ApplicationGatewayAffinity-Cookie-ID übereinstimmt, sollte das Paket an den gleichen Back-End-Server gesendet werden, der zuvor verwendet wurde. Sehen Sie sich die nächsten Zeilen der HTTP-Kommunikation an, um zu überprüfen, ob sich das ApplicationGatewayAffinity-Cookie des Clients ändert.

    Ein Screenshot, der ein Beispiel für Details eines Protokolleintrags mit hervorgehobenem „Cookie“ zeigt.

Hinweis

Für dieselbe Kommunikationssitzung sollte sich das Cookie nicht ändern. Überprüfen Sie das obere Feld auf der rechten Seite. Wählen Sie die Registerkarte „Cookies“ aus, um zu überprüfen, ob der Client das Cookie verwendet und zurück an das Anwendungsgateway sendet. Wenn dies nicht der Fall ist, wird das Cookie im Clientbrowser nicht beibehalten und nicht für die Kommunikation verwendet. In einigen Fällen kann der Client falsche Informationen angeben.

Nächste Schritte

Sollte sich das Problem mit den oben genannten Schritten nicht beheben lassen, erstellen Sie ein Supportticket.