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
Controllare se l'impostazione "Affinità basata su cookie" è abilitata
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:
Accedere al portale di Azure.
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.
Selezionare la scheda Impostazioni HTTP in IMPOSTAZIONI.
Selezionare l'impostazione HTTP e nella pagina Aggiungi impostazione HTTP, verificare se 'Affinità basata su cookie è abilitata.
È anche possibile controllare il valore di "CookieBasedAffinity" impostato su Enabledin "backendHttpSettingsCollection" usando uno dei metodi seguenti:
- Eseguire Get-AzApplicationGatewayBackendHttpSetting nel PowerShell
- Esaminare il file JSON usando il modello di Azure Resource Manager
"cookieBasedAffinity": "Enabled",
L'applicazione non può gestire l'affinità basata su cookie
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.
L'applicazione usa l'affinità basata su cookie, ma le richieste continuano a rimbalzare tra i server back-end
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:
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.
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:
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.
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.
Per iniziare a raccogliere dati, selezionare Aggiungi impostazione di diagnostica.
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.
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:
Scaricare Fiddler.
Nota
Scegliere Fiddler4 se nel computer di acquisizione è installato .NET 4. In caso contrario, scegliere Fiddler2.
Fare clic con il pulsante destro del mouse sul file eseguibile di installazione ed eseguire come amministratore per installarlo.
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.
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".
È 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:
Dopo aver riprodotto il problema, salvare il file per la revisione selezionando File>Salva>Tutte le Sessioni....
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 un "Set-Cookie: ApplicationGatewayAffinity= ApplicationGatewayAffinityValue". Se non è presente alcun cookie, l'affinità di sessione non è impostata o l'gateway applicazione non applica 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.
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.
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.