Configurare il servizio app con il gateway applicazione
Articolo
Il gateway applicazione consente di usare un'app Servizio app o un altro servizio multi-tenant come membro del pool back-end. Questo articolo descrive come configurare un'app Servizio app con il gateway applicazione. La configurazione per il gateway applicazione varia a seconda della modalità di accesso al servizio app:
La prima opzione usa un dominio personalizzato sia nel gateway applicazione che nel servizio app nel back-end.
La seconda opzione consiste nel fare in modo che il servizio app acceda al servizio app usando il relativo dominio predefinito, con suffisso ".azurewebsites.net".
Questa configurazione è consigliata per gli scenari di livello di produzione e soddisfa la procedura di non modificare il nome host nel flusso di richiesta. È necessario disporre di un dominio personalizzato (e del certificato associato) per evitare di dover fare affidamento sul dominio predefinito ".azurewebsites".
Associando lo stesso nome di dominio sia al gateway applicazione che al servizio app nel pool back-end, il flusso di richiesta non deve eseguire l'override del nome host. L'applicazione Web back-end vedrà l'host originale usato dal client.
Questa configurazione è la più semplice e non richiede un dominio personalizzato. Di conseguenza, consente una configurazione rapida.
Avviso
Questa configurazione presenta limitazioni. È consigliabile esaminare le implicazioni associate all'uso di nomi host diversi tra il client e il gateway applicazione e tra l'applicazione e il Servizio app nel back-end. Per altre informazioni, vedere l'articolo in Centro architetture: Mantenere il nome host HTTP originale tra un proxy inverso e l'applicazione Web back-end
Quando al servizio app non è associato un dominio personalizzato, l'intestazione host nella richiesta in ingresso nell'applicazione Web dovrà essere impostata sul dominio predefinito, con suffisso ".azurewebsites.net", oppure la piattaforma non sarà in grado di instradare correttamente la richiesta.
L'intestazione host nella richiesta originale ricevuta dal gateway applicazione sarà diversa dal nome host del servizio app back-end.
Questo articolo descrive come:
Configurare DNS
Aggiungere il servizio app come pool back-end al gateway applicazione
Configurare le impostazioni HTTP per la connessione al servizio app
Un nome di dominio personalizzato e un certificato associato (firmato da un'autorità nota), archiviato in Key Vault. Per altre informazioni su come archiviare i certificati in Key Vault, vedere Esercitazione: Importare un certificato in Azure Key Vault
Indirizzare l'utente o il client al gateway applicazione usando il dominio personalizzato. Configurare il DNS usando un alias CNAME a cui punta il DNS per il gateway applicazione. L'indirizzo DNS del gateway applicazione viene visualizzato nella pagina di panoramica dell'indirizzo IP pubblico associato. In alternativa, creare un record A che punta direttamente all'indirizzo IP. (Per il gateway applicazione V1, l'indirizzo VIP può cambiare se si arresta e si avvia il servizio, che rende questa opzione indesiderata).
Il servizio app deve essere configurato in modo da accettare il traffico dal gateway applicazione usando il nome di dominio personalizzato come host in ingresso. Per altre informazioni su come eseguire il mapping di un dominio personalizzato al servizio app, vedere Esercitazione: Eseguire il mapping di un nome DNS personalizzato esistente al servizio app di Azure Per verificare il dominio, il servizio app richiede solo l'aggiunta di un record TXT. Non è necessaria alcuna modifica nei record CNAME o A. La configurazione DNS per il dominio personalizzato rimarrà indirizzata al gateway applicazione.
Quando non è disponibile alcun dominio personalizzato, l'utente o il client può accedere al gateway applicazione usando l'indirizzo IP del gateway o il relativo indirizzo DNS. L'indirizzo DNS del gateway applicazione è disponibile nella pagina di panoramica dell'indirizzo IP pubblico associato. La mancata disponibilità di un dominio personalizzato implica che non sarà disponibile alcun certificato firmato pubblicamente per TLS nel gateway applicazione. I client sono limitati all'uso di HTTP o HTTPS con un certificato autofirmato, entrambi indesiderati.
Per connettersi al servizio app, il gateway applicazione usa il dominio predefinito fornito dal servizio app (con suffisso "azurewebsites.net").
Nel portale di Azure selezionare il gateway applicazione.
In Pool back-end, selezionare il pool back-end.
In Tipo di destinazione, selezionare Serviziapp.
In Destinazione selezionare il servizio app.
Nota
L'elenco a discesa popola solo i servizi app che si trovano nella stessa sottoscrizione del gateway applicazione. Se si vuole usare un servizio app che si trova in una sottoscrizione diversa da quella in cui si trova il gateway applicazione, invece di scegliere Servizi app nell'elenco a discesa Destinazioni, scegliere indirizzo IP o nome host e immettere il nome host (example.azurewebsites.net) del servizio app.
Seleziona Salva.
# Fully qualified default domain name of the web app:
$webAppFQDN = "<nameofwebapp>.azurewebsite.net"
# For Application Gateway: both name, resource group and name for the backend pool to create:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add a new Backend Pool with App Service in there:
Add-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw -BackendFqdns $webAppFQDN
# Update Application Gateway with the new added Backend Pool:
Set-AzApplicationGateway -ApplicationGateway $gw
Modificare le impostazioni HTTP per il servizio app
È necessaria un'impostazione HTTP che indica al gateway applicazione di accedere al back-end del servizio app usando il nome di dominio personalizzato. L'impostazione HTTP userà per impostazione predefinita il probe di integrità predefinito. Mentre i probe di integrità predefiniti inoltrano le richieste con il nome host in cui viene ricevuto il traffico, i probe di integrità utilizzeranno 127.0.0.1 come nome host al pool back-end perché non è stato definito in modo esplicito alcun nome host. Per questo motivo, è necessario creare un probe di integrità personalizzato configurato con il nome di dominio personalizzato corretto come nome host.
Ci si connetterà al back-end usando HTTPS.
In Impostazioni HTTP selezionare un'impostazione HTTP esistente o aggiungerne una nuova.
Quando si crea una nuova impostazione HTTP, assegnare un nome
Selezionare HTTPS come protocollo back-end desiderato usando la porta 443
Assicurarsi di impostare "Esegui override con il nuovo nome host" su "No"
Selezionare il probe di integrità HTTPS personalizzato nell'elenco a discesa "Probe personalizzato".
È necessaria un'impostazione HTTP che indica al gateway applicazione di accedere al back-end del servizio app usando il nome di dominio predefinito ("azurewebsites.net"). A tale scopo, l'impostazione HTTP sostituirà in modo esplicito il nome host.
In Impostazioni HTTP selezionare un'impostazione HTTP esistente o aggiungerne una nuova.
Quando si crea una nuova impostazione HTTP, assegnare un nome
Selezionare HTTPS come protocollo back-end desiderato usando la porta 443
Assicurarsi di impostare "Esegui override con il nuovo nome host" su "Sì"
In "Override del nome host" selezionare "Selezionare il nome host dalla destinazione back-end". Questa impostazione fa sì che la richiesta verso il servizio app usi il nome host "azurewebsites.net", come è configurato nel pool back-end.
# Configure Application Gateway to connect to App Service using the incoming hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$customProbeName = "<name for custom health probe>"
$customDomainName = "<FQDN for custom domain associated with App Service>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add custom health probe using custom domain name:
Add-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw -Protocol Https -HostName $customDomainName -Path "/" -Interval 30 -Timeout 120 -UnhealthyThreshold 3
$probe = Get-AzApplicationGatewayProbeConfig -Name $customProbeName -ApplicationGateway $gw
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -Probe $probe -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
# Configure Application Gateway to connect to backend using default App Service hostname
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpSettingsName = "<name for http settings to be created>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Add HTTP Settings to use towards App Service:
Add-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw -Protocol Https -Port 443 -PickHostNameFromBackendAddress -CookieBasedAffinity Disabled -RequestTimeout 30
# Update Application Gateway with the new added HTTP settings and probe:
Set-AzApplicationGateway -ApplicationGateway $gw
Aprire la sezione "Listener" e scegliere "Aggiungi listener" oppure fare clic su un listener esistente da modificare
Per un nuovo listener: assegnargli un nome
In "IP front-end" selezionare l'indirizzo IP su cui rimanere in ascolto
In "Porta" selezionare 443
In "Protocollo" selezionare "HTTPS"
In "Scegliere un certificato" selezionare "Scegliere un certificato da Key Vault". Per altre informazioni, vedere Uso di Key Vault in cui sono disponibili altre informazioni su come assegnare un'identità gestita e fornire diritti all'insieme di credenziali delle chiavi.
Assegnare un nome al certificato
Selezionare l'identità gestita
Selezionare l'insieme di credenziali delle chiavi da dove ottenere il certificato
Selezionare il certificato
In "Tipo listener", selezionare "Basic"
Fare clic su "Aggiungi" per aggiungere il listener
Supponendo che non sia disponibile un dominio personalizzato o un certificato associato, il gateway applicazione verrà configurato per l'ascolto del traffico HTTP sulla porta 80. In alternativa, vedere le istruzioni su come creare un certificato autofirmato
Aprire la sezione "Listener" e scegliere "Aggiungi listener" oppure fare clic su un listener esistente da modificare
Per un nuovo listener: assegnargli un nome
In "IP front-end" selezionare l'indirizzo IP su cui rimanere in ascolto
In "Porta" selezionare 80
In “Protocollo”, selezionare “Qualsiasi”
# This script assumes that:
# - a certificate was imported in Azure Key Vault already
# - a managed identity was assigned to Application Gateway with access to the certificate
# - there is no HTTP listener defined yet for HTTPS on port 443
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$appGwSSLCertificateName = "<name for ssl cert to be created within Application Gateway"
$appGwSSLCertificateKeyVaultSecretId = "<key vault secret id for the SSL certificate to use>"
$httpListenerName = "<name for the listener to add>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Create SSL certificate object for Application Gateway:
Add-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw -KeyVaultSecretId $appGwSSLCertificateKeyVaultSecretId
$sslCert = Get-AzApplicationGatewaySslCertificate -Name $appGwSSLCertificateName -ApplicationGateway $gw
# Fetch public ip associated with Application Gateway:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
$port = New-AzApplicationGatewayFrontendPort -Name "port_443" -Port 443
Add-AzApplicationGatewayFrontendPort -Name "port_443" -ApplicationGateway $gw -Port 443
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Https -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port -SslCertificate $sslCert
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
In molti casi esiste già un listener pubblico per HTTP sulla porta 80. Lo script seguente ne creerà uno se questo non è ancora il caso.
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for the listener to add if not exists yet>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check if HTTP listener on port 80 already exists:
$port = $gw.FrontendPorts | Where-Object {$_.Port -eq 80}
$listener = $gw.HttpListeners | Where-Object {$_.Protocol.ToString().ToLower() -eq "http" -and $_.FrontendPort.Id -eq $port.Id}
if ($listener -eq $null){
$frontendIpConfig = $gw.FrontendIpConfigurations | Where-Object {$_.PublicIpAddress -ne $null}
Add-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw -Protocol Http -FrontendIPConfiguration $frontendIpConfig -FrontendPort $port
# Update Application Gateway with the new HTTPS listener:
Set-AzApplicationGateway -ApplicationGateway $gw
}
Configurare la regola di routing delle richieste
Usando il pool back-end configurato in precedenza e le impostazioni HTTP, è possibile configurare la regola di routing delle richieste per accettare il traffico da un listener e instradarlo al pool back-end usando le impostazioni HTTP. Per questo, assicurarsi di disporre di un listener HTTP o HTTPS non già associato a una regola di routing esistente.
Aprire la sezione "Integrità back-end" e verificare che la colonna "Stato" indichi la combinazione per l'impostazione HTTP e il pool back-end come "Integro".
Passare ora all'applicazione Web usando l'indirizzo IP del gateway applicazione o il nome DNS associato per l'indirizzo IP. Entrambi sono disponibili nella pagina "Panoramica" del gateway applicazione come proprietà in "Essentials". In alternativa, la risorsa Indirizzo IP pubblico mostra anche l'indirizzo IP e il nome DNS associato.
Prestare attenzione all'elenco non esaustivo seguente di potenziali sintomi durante il test dell'applicazione:
reindirizzamenti che puntano direttamente a ".azurewebsites.net" anziché al gateway applicazione
sono inclusi i reindirizzamenti di autenticazione che provano ad accedere direttamente ad ".azurewebsites.net"
cookie associati a dominio non passati al back-end
Le condizioni precedenti (descritte in modo più dettagliato in Centro architetture) indicano che l'applicazione Web non gestisce correttamente la riscrittura del nome host. Si tratta di una situazione che si riscontra spesso. Il modo consigliato per gestire questa operazione consiste nel seguire le istruzioni per la configurazione del gateway applicazione con il servizio app usando un dominio personalizzato. Vedere anche: Risolvere i problemi del servizio app nel gateway applicazione.
Aprire la sezione "Integrità back-end" e verificare che la colonna "Stato" indichi la combinazione per l'impostazione HTTP e il pool back-end come "Integro".
Passare ora all'applicazione Web usando il dominio personalizzato associato sia al gateway applicazione che al servizio app nel back-end.
Controllare se l'integrità back-end per il back-end e le impostazioni HTTP vengono visualizzate come "Integre":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Per testare la configurazione, il contenuto verrà richiesto dal servizio app tramite il gateway applicazione usando il dominio personalizzato:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Controllare se l'integrità back-end per il back-end e le impostazioni HTTP vengono visualizzate come "Integre":
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Check health:
Get-AzApplicationGatewayBackendHealth -ResourceGroupName $rgName -Name $appGwName
Per testare la configurazione, il contenuto verrà richiesto dal servizio app tramite il gateway applicazione usando l'indirizzo IP:
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get ip address:
$ipAddressResourceId = $gw.FrontendIPConfigurations.PublicIPAddress.Id
$ipAddressResource = Get-AzResource -ResourceId $ipAddressResourceId
$publicIp = Get-AzPublicIpAddress -ResourceGroupName $ipAddressResource.ResourceGroupName -Name $ipAddressResource.Name
Write-Host "Public ip address for Application Gateway is $($publicIp.IpAddress)"
Invoke-WebRequest "http://$($publicIp.IpAddress)"
Prestare attenzione all'elenco non esaustivo seguente di potenziali sintomi durante il test dell'applicazione:
reindirizzamenti che puntano direttamente a ".azurewebsites.net" anziché al gateway applicazione
sono inclusi i reindirizzamenti dell'autenticazione del servizio app che provano direttamente ad accedere ad ".azurewebsites.net"
cookie associati a dominio non passati al back-end
Le condizioni precedenti (descritte in modo più dettagliato in Centro architetture) indicano che l'applicazione Web non gestisce correttamente la riscrittura del nome host. Si tratta di una situazione che si riscontra spesso. Il modo consigliato per gestire questa operazione consiste nel seguire le istruzioni per la configurazione del gateway applicazione con il servizio app usando un dominio personalizzato. Vedere anche: Risolvere i problemi del servizio app nel gateway applicazione.
Limita accesso
L'app Web distribuita in questi esempi usa indirizzi IP pubblici a cui è possibile accedere direttamente da Internet. Questo facilita la risoluzione dei problemi quando si sta imparando una nuova funzionalità e si provano le novità. Ma se si prevede di distribuire una funzionalità in produzione, sarà necessario aggiungere altre restrizioni. Valutare le opzioni seguenti:
Usare restrizioni IP statiche del servizio app di Azure. Ad esempio, è possibile limitare l'app Web in modo che riceva solo il traffico del gateway applicazione. Usare la funzionalità di restrizione IP del servizio app per aggiungere l'indirizzo VIP di un gateway applicazione come unico indirizzo con accesso.