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 des Azure Az PowerShell-Moduls. 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 ggf. durch Application Gateway v1-Instanzen ersetzt werden.

Mögliche Problemursachen

Das Problem bei der Aufrechterhaltung der cookiebasierten Sitzungsaffinität kann folgende Hauptursachen haben:

  • 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 zu überprüfen, ob Sie die Einstellung „Cookiebasierte Affinität“ auf der Registerkarte „HTTP-Einstellungen“ im Azure-Portal aktiviert haben, gehen Sie wie folgt vor:

  1. Melden Sie sich beim Azure-Portalan.

  2. Klicken Sie im linken Navigationsbereich auf Alle Ressourcen. Klicken Sie auf dem Blatt „Alle Ressourcen“ auf den Anwendungsgatewaynamen. 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 unter EINSTELLUNGEN die Registerkarte HTTP-Einstellungen aus.

    Screenshot shows SETTINGS with H T T P settings selected.

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

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

Sie können auch mithilfe einer der folgenden Methoden überprüfen, ob der Wert von CookieBasedAffinity unter backendHttpSettingsCollection auf Enabled festgelegt ist:

"cookieBasedAffinity": "Enabled", 

Ursache

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

Problemumgehung

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

Symptom

Sie haben die Einstellung „Cookiebasierte Affinität“ aktiviert. Wenn Sie in Internet Explorer über eine Kurznamen-URL auf das Anwendungsgateway zugreifen, z. B. http://website, wird die Anforderung trotzdem zwischen Back-End-Servern weitergeleitet.

Gehen Sie zum Beheben dieses Problems wie folgt vor:

  1. Erstellen Sie eine Webdebugger-Ablaufverfolgung für den „Client“, über den hinter dem Anwendungsgateway eine Verbindung mit der Anwendung hergestellt wird. (In diesem Beispiel wird Fiddler verwendet.) 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 wie z. B. "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" im Cookie-Set nicht finden, bedeutet dies, dass der Client nicht mit dem ApplicationGatewayAffinity-Cookie antwortet, das vom Anwendungsgateway bereitgestellt wird. Beispiel:

    Screenshot shows a session log with a single entry highlighted.

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

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 unter Verwendung eines vollqualifizierten Domänennamens (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 shows an application gateway with Diagnostics settings selected.

  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.

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

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

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

Mit Webdebuggingtools wie Fiddler können Sie Webanwendungen debuggen, indem Sie den Netzwerkdatenverkehr zwischen dem Internet und Testcomputern erfassen. Mit diesen Tools können Sie eingehende und ausgehende Daten überprüfen, wenn sie im Browser empfangen oder gesendet werden. Fiddler (das in diesem Beispiel verwendete Tool) umfasst eine Option zur HTTP-Wiederholung, über die Sie clientseitige Probleme bei Webanwendungen beheben können, vor allem Probleme bei der Authentifizierung.

Sie können einen Webdebugger Ihrer Wahl verwenden. In diesem Beispiel wird Fiddler verwendet, um HTTP- oder HTTPS-Datenverkehr zu erfassen und zu analysieren. Gehen Sie wie folgt vor:

  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 shows the Fiddler setup program with a contextual menu with Run as administrator selected.

  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.

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

  4. In den meisten Fällen möchten Sie wahrscheinlich entschlüsselten HTTPS-Datenverkehr erfassen. Sie können die HTTP-Entschlüsselung aktivieren, indem Sie Tools>Fiddler Options (Tools > Fiddler-Optionen) auswählen und das Kontrollkästchen Decrypt HTTPS traffic (HTTPS-Datenverkehr entschlüsseln) aktivieren.

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

  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:

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

  6. Nachdem Sie das Problem reproduziert haben, speichern Sie die Datei zur Überprüfung, indem Sie File>Save>All Sessions... (Datei > Speichern > Alle Sitzungen...) auswählen.

    Screenshot shows the File Save All Sessions option selected.

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

    Beispiele:

  • Beispiel A: Sie finden ein Sitzungsprotokoll, in dem angegeben ist, dass die Anforderung vom Client an die öffentliche IP-Adresse des Anwendungsgateways gesendet wird. Klicken Sie auf dieses Protokoll, um die Details anzuzeigen. Auf der rechten Seite sind im unteren Feld die Daten aufgeführt, die das Anwendungsgateway an den Client zurückgibt. Navigieren Sie zur Registerkarte „RAW“, und bestimmen Sie, ob der Client „Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue“ empfängt. Wenn kein Cookie vorhanden ist, ist keine Sitzungsaffinität festgelegt oder das Anwendungsgateway wendet kein Cookie auf den Client an.

    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.

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

  • 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.

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

Hinweis

In einer 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.