Condividi tramite


Risolvere i problemi di affinità di sessione del gateway applicazione di Azure

Informazioni su come diagnosticare e risolvere i problemi di affinità di sessione con il gateway applicazione di Azure.

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Panoramica

La funzionalità di affinità di sessione basata su cookie è utile per mantenere una sessione utente nello stesso server. Usando cookie gestiti dal gateway, il gateway applicazione può indirizzare il traffico successivo proveniente da una sessione utente allo stesso server per l'elaborazione. Questo è importante nei casi in cui lo stato della sessione viene salvato in locale sul server per una sessione utente. L'affinità di sessione è nota anche come sessioni permanenti.

Nota

Il gateway applicazione v1 genera un cookie denominato ARRAffinity, usato per indirizzare il traffico allo stesso membro del pool back-end. Nel gateway applicazione v2 questo cookie è stato rinominato ApplicationGatewayAffinity. Ai fini di questo documento, ApplicationGatewayAffinity verrà usato come esempio, ARRAffinity può essere sostituito, se valido per le istanze del gateway applicazione v1.

Possibili cause di problemi

Il problema nella gestione dell'affinità di sessione basata su cookie può verificarsi a causa dei seguenti motivi principali:

  • L'impostazione "Affinità basata su cookie" non è abilitata
  • L'applicazione non può gestire l'affinità basata su cookie
  • L'applicazione usa l'affinità basata su cookie, ma le richieste continuano a rimbalzare tra i server back-end

A volte possono verificarsi problemi di affinità di sessione quando si dimentica di abilitare l'impostazione “di affinità” basata su cookie. Per determinare se è stata abilitata l'impostazione "Affinità basata su cookie" nella scheda Impostazioni HTTP del portale di Azure, seguire le istruzioni:

  1. Accedere al portale di Azure.

  2. Nel pannello di navigazione a sinistra fare clic su Tutte le risorse. Fare clic su gateway applicazione nel pannello Tutte le risorse. Se l’abbonamento selezionato include già diverse risorse, è possibile inserire il nome del gateway applicazione nella casella Filtra per nome… per accedere facilmente al gateway applicazione.

  3. Selezionare la scheda Impostazioni HTTP in IMPOSTAZIONI.

    Screenshot che mostra edizione Standard TTINGS con le impostazioni T T P selezionate.

  4. Selezionare l'impostazione HTTP e nella pagina Aggiungi impostazione HTTP, verificare se 'Affinità basata su cookie è abilitata.

    Screenshot che mostra le impostazioni del gateway per un gateway app, incluso se è selezionata l'affinità basata su cookie.

È anche possibile controllare il valore di "CookieBasedAffinity" impostato su Enabledin "backendHttpSettingsCollection" usando uno dei metodi seguenti:

"cookieBasedAffinity": "Enabled", 

Causa

Il gateway applicazione può eseguire solo l'affinità basata su sessione usando un cookie.

Soluzione alternativa

Se l'applicazione non può gestire l'affinità basata su cookie, è necessario usare un servizio di bilanciamento del carico interno o esterno di Azure o un'altra soluzione di terze parti.

Sintomo

È stata abilitata l'impostazione Affinità basata su cookie, quando si accede al gateway applicazione usando un URL di nome breve in Internet Explorer, ad esempio: http://website, la richiesta continua a rimbalzare tra i server back-end.

Per identificare questo problema, seguire le istruzioni:

  1. Eseguire una traccia del debugger Web nel “client” che si connette all'applicazione dietro il gateway applicazione(in questo esempio viene usato Fiddler). Suggerimento Se non si sa come usare Fiddler, selezionare l'opzione "Raccogliere il traffico di rete e analizzarlo usando il debugger Web" nella parte inferiore.

  2. Controllare e analizzare i log di sessione per determinare se i cookie forniti dal client hanno i dettagli di ApplicationGatewayAffinity. Se non si trovano i dettagli di ApplicationGatewayAffinity, ad esempio "ApplicationGatewayAffinity=ApplicationGatewayAffinityValue" all'interno del set di cookie, significa che il client non risponde con il cookie ApplicationGatewayAffinity, fornito dal gateway applicazione. Ad esempio:

    Screenshot che mostra un log di sessione con una singola voce evidenziata.

    Screenshot che mostra le intestazioni della richiesta per H T T P, incluse le informazioni sui cookie.

L'applicazione continua a provare ad impostare il cookie ad ogni richiesta fino a quando non riceve risposta.

Causa

Questo problema si verifica perché Internet Explorer e altri browser potrebbero non archiviare o usare il cookie con un URL con un nome breve.

Risoluzione

Per risolvere il problema è necessario accedere al gateway applicazione usando un nome di dominio completo. Ad esempio, usare http://website.com o http://appgw.website.com.

Log aggiuntivi per la risoluzione dei problemi

È possibile raccogliere log aggiuntivi e analizzarli per risolvere i problemi correlati all'affinità di sessione basata su cookie

Analizzare i log del gateway applicazione

Per raccogliere i log del gateway applicazione, seguire le istruzioni:

Abilitare la registrazione usando il portale di Azure.

  1. Nel portale di Azuretrovare la risorsa e quindi selezionare impostazione di diagnostica.

    Per il gateway applicazione sono disponibili tre log: log di accesso, log delle prestazioni e log del firewall.

  2. Per iniziare a raccogliere dati, selezionare Aggiungi impostazione di diagnostica.

    Screenshot che mostra un gateway applicazione con le impostazioni di diagnostica selezionate.

  3. La pagina Impostazione di diagnostica fornisce le impostazioni per i log di diagnostica. In questo esempio viene usato Log Analytics per archiviare i log. Per salvare i log di diagnostica è possibile anche usare l'hub eventi e un account di archiviazione.

    Screenshot che mostra il riquadro Impostazioni di diagnostica con Log Analytics Configure selezionato.

  4. Confermare le impostazioni e quindi selezionare Salva.

Usare il debugger Web per acquisire e analizzare il traffico HTTP o HTTPS

Gli strumenti di debug Web come Fiddler consentono di eseguire il debug di applicazioni Web acquisendo il traffico di rete tra Internet e i computer di test. Questi strumenti consentono di controllare i dati in ingresso e in uscita man mano che il browser li riceve o li invia. Fiddler, in questo esempio, ha l'opzione di riproduzione HTTP che consente di risolvere i problemi del client con le applicazioni Web, in particolare per il tipo di problema di autenticazione.

Usare il debugger Web preferito. In questo esempio si userà Fiddler per acquisire e analizzare il traffico HTTP o HTTPS. Seguire le istruzioni seguenti:

  1. Scaricare Fiddler.

    Nota

    Scegliere Fiddler4 se nel computer di acquisizione è installato .NET 4. In caso contrario, scegliere Fiddler2.

  2. Fare clic con il pulsante destro del mouse sul file eseguibile di installazione ed eseguire come amministratore per installarlo.

    Screenshot che mostra il programma di installazione di Fiddler con un menu contestuale con l'opzione Esegui come amministratore selezionata.

  3. Quando si apre Fiddler, dovrebbe iniziare automaticamente ad acquisire il traffico (notare l’Acquisizione nell'angolo in basso a sinistra). Premere F12 per avviare o interrompere l'acquisizione del traffico.

    Screenshot che mostra il debugger Web fiddler con l'indicatore Di acquisizione evidenziato.

  4. Molto probabilmente, si sarà interessati a decrittografare il traffico HTTPS. Per far ciò, si può abilitare la decrittografia HTTPS selezionando Strumenti>Opzioni Fiddler e selezionare la casella " Decrittografare il traffico HTTPS".

    Screenshot che mostra l'opzione Opzioni in Fiddler con H T T P selezionata e Decrittografa il traffico HTTPS selezionato.

  5. È possibile rimuovere le sessioni non correlate precedenti prima di riprodurre il problema facendo clic su X (icona) >Rimuovere Tutto come si può vedere nello screenshot seguente:

    Screenshot che mostra l'icona X selezionata, che mostra l'opzione Rimuovi tutto.

  6. Dopo aver riprodotto il problema, salvare il file per la revisione selezionando File>Salva>Tutte le Sessioni....

    Screenshot che mostra l'opzione Salva tutte le sessioni selezionata.

  7. Controllare e analizzare i log di sessione per determinare qual è il problema.

    Ad esempio:

  • Esempio A: Si trova un log di sessione che la richiesta viene inviata dal client e passa all'indirizzo IP pubblico del gateway applicazione. Fare clic su questo log per visualizzare i dettagli. Sul lato destro, i dati nella casella in basso sono gli elementi restituiti dal gateway applicazione al client. Selezionare la “scheda RAW” e determinare se il client riceve unSet-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue". Se non è presente nessun cookie, l'affinità di sessione non è impostata o il gateway applicazione non applica di nuovo il cookie al client.

    Nota

    Questo valore di ApplicationGatewayAffinity è l'ID cookie che il gateway applicazione imposta per l'invio del client a un determinato server back-end.

    Screenshot che mostra un esempio di dettagli di una voce di log con il valore Set-Cookie evidenziato.

  • Esempio B: Il log sessione successivo seguito da quello precedente è il client che risponde al gateway applicazione, che ha impostato ApplicationGatewayAffinity. Se applicationGatewayAffinity cookie-id corrisponde, il pacchetto deve essere inviato allo stesso server back-end usato in precedenza. Controllare le righe successive di comunicazione HTTP per verificare se il cookie ApplicationGatewayAffinity del client sta cambiando.

    Screenshot che mostra un esempio di dettagli di una voce di log con un cookie evidenziato.

Nota

Per la stessa sessione di comunicazione, il cookie non deve cambiare. Selezionare la casella superiore sul lato destro, selezionare la scheda "Cookie" per verificare se il client usa il cookie e inviarlo di nuovo al gateway applicazione. In caso contrario, il browser client non mantiene il cookie e non lo usa per le conversazioni. A volte, il client potrebbe “mentire”.

Passaggi successivi

Se i passaggi precedenti non risolvono il problema, aprire un ticket di supporto.