Risolvere i problemi di reindirizzamento di Servizio app di Azure in Application Gateway

Riassunto

Scopri come diagnosticare e risolvere i problemi di reindirizzamento di Servizio app di Azure quando App Service viene usato come backend di destinazione con gateway applicazione di Azure.

Informazioni generali

Questo articolo illustra come risolvere i seguenti problemi, come descritto in maggiori dettagli nel Centro Architetture: Mantenere il nome host HTTP originale tra un proxy inverso e l'applicazione Web back-end.

Questo elenco di problemi non è esaustivo, ma comprende i problemi più comuni che possono verificarsi quando Application Gateway viene usato come proxy inverso per App Service:

  • URL assoluti non corretti
  • URL di reindirizzamento non corretti
    • L'URL del servizio app viene esposto nel browser quando è presente un reindirizzamento. Ad esempio, un flusso di autenticazione OpenID Connect (OIDC) viene interrotto a causa di un reindirizzamento con il nome host errato. Questo problema include l'uso di Autenticazione e autorizzazione di App Service.
  • Cookie danneggiati
    • I cookie non vengono propagati tra il browser e il servizio app. Ad esempio, il dominio del cookie ARRAffinity di App Service è impostato sul nome host di App Service ed è associato a example.azurewebsites.net anziché all'host originale. Di conseguenza, l'affinità di sessione viene interrotta.

La causa principale di questi problemi è una configurazione che sovrascrive il nome host usato da Application Gateway quando comunica con App Service con un nome host diverso rispetto a quello visualizzato dal browser. Spesso il nome host viene sostituito con il dominio predefinito di App Service azurewebsites.net.

Schermata di Application Gateway che sovrascrive il nome host con il dominio App Service azurewebsites.net.

Configurazione di esempio

Se la configurazione corrisponde a una delle due situazioni seguenti, la configurazione è allineata alle istruzioni riportate in questo articolo.

  • Scegli nome host dall'indirizzo back-end è abilitato in Impostazioni HTTP.
  • Eseguire l'override con un nome di dominio specifico è impostato su un valore diverso da quello che ha la richiesta del browser.

Motivo

Il servizio app è un servizio multi-tenant, quindi usa l'intestazione host nella richiesta per instradare la richiesta all'endpoint corretto. Il nome di dominio predefinito di App Service, *.azurewebsites.net (come contoso.azurewebsites.net), è diverso dal nome di dominio del gateway applicativo (come contoso.com). Nel servizio app di back-end manca il contesto richiesto per generare URL di reindirizzamento o cookie in linea con il dominio visualizzato dal browser.

Soluzione

Configurare Application Gateway e App Service perché non sovrascrivano il nome host. Seguire le istruzioni per "Dominio personalizzato (scelta consigliata)" in Configurare il servizio app con il gateway dell'applicazione.

Considerare l'applicazione della seguente soluzione alternativa (una riscrittura dell'intestazione Location, come descritto nella sezione successiva) solo dopo aver valutato le implicazioni descritte in Preservare il nome host HTTP originale tra un proxy inverso e la sua applicazione web di back-end. Queste implicazioni includono la possibilità che i cookie vincolati al dominio e gli URL assoluti al di fuori dell'header Location continuino a non funzionare.

Soluzione alternativa - Riscrivere l'intestazione Location

Avviso

Questa configurazione presenta limitazioni. Esamina le implicazioni dell'uso di nomi host differenti tra il client e Application Gateway e tra Application Gateway e App Service nel backend. Per altre informazioni, consultare Preservare il nome host HTTP originale tra un proxy inverso e l'applicazione Web di back-end.

Impostare il nome host nell'intestazione dell'ubicazione sul nome di dominio del gateway dell'applicazione. A tale scopo, creare una regola di riscrittura con una condizione che valuta se l'intestazione della posizione nella risposta contiene azurewebsites.net. Deve anche eseguire un'azione per riscrivere l'intestazione del percorso in modo che abbia il nome host del gateway dell'applicazione. Per altre informazioni, vedi come riscrivere l'intestazione Location.

Annotazioni

Il supporto per la riscrittura delle intestazioni HTTP è disponibile solo per lo SKU Standard_v2 e WAF_v2 di Application Gateway. È consigliabile eseguire la migrazione alla versione 2 per la riscrittura dell'intestazione e altre funzionalità avanzate disponibili con SKU v2.