Met Application Gateway kunt u een App Service-app of een andere service met meerdere tenants hebben als lid van een back-endpool. In dit artikel leert u hoe u een App Service-app configureert met Application Gateway. De configuratie voor Application Gateway verschilt, afhankelijk van hoe App Service wordt geopend:
De eerste optie maakt gebruik van een aangepast domein op zowel Application Gateway als de App Service in de back-end.
De tweede optie is om Application Gateway toegang te geven tot App Service met behulp van het standaarddomein, achtervoegsel '.azurewebsites.net'.
Deze configuratie wordt aanbevolen voor scenario's op productieniveau en voldoet aan de praktijk van het niet wijzigen van de hostnaam in de aanvraagstroom. U moet beschikken over een aangepast domein (en het bijbehorende certificaat) om te voorkomen dat u moet vertrouwen op het standaarddomein .azurewebsites.
Door dezelfde domeinnaam te koppelen aan zowel Application Gateway als App Service in de back-endpool, hoeft de aanvraagstroom de hostnaam niet te overschrijven. De back-endwebtoepassing ziet de oorspronkelijke host die door de client is gebruikt.
Deze configuratie is het eenvoudigst en vereist geen aangepast domein. Hierdoor is een snelle, handige installatie mogelijk.
Wanneer er geen aangepast domein aan App Service is gekoppeld, moet de hostheader op de binnenkomende aanvraag in de webtoepassing worden ingesteld op het standaarddomein, achtervoegsel met '.azurewebsites.net' of anders kan het platform de aanvraag niet correct routeren.
De hostheader in de oorspronkelijke aanvraag die door Application Gateway wordt ontvangen, verschilt van de hostnaam van de back-end-App Service.
In dit artikel leert u het volgende:
DNS configureren
App Service toevoegen als back-endpool aan Application Gateway
HTTP-instellingen configureren voor de verbinding met App Service
Routeer de gebruiker of client naar Application Gateway met behulp van het aangepaste domein. Stel DNS in met behulp van een CNAME-alias die wee naar de DNS voor Application Gateway. Het DNS-adres van Application Gateway wordt weergegeven op de overzichtspagina van het bijbehorende openbare IP-adres. U kunt ook een A-record maken die rechtstreeks naar het IP-adres verwijst. (Voor Application Gateway V1 kan het VIP wijzigen als u de service stopt en start, waardoor deze optie niet gewenst is.)
App Service moet worden geconfigureerd, zodat het verkeer van Application Gateway accepteert met behulp van de aangepaste domeinnaam als de binnenkomende host. Zie Zelfstudie: Een bestaande aangepaste DNS-naam toewijzen aan Azure-app Service Om het domein te verifiëren, vereist App Service alleen het toevoegen van een TXT-record voor meer informatie over het toewijzen van een aangepast domein aan de App Service. Er is geen wijziging vereist voor CNAME- of A-records. De DNS-configuratie voor het aangepaste domein blijft gericht op Application Gateway.
Wanneer er geen aangepast domein beschikbaar is, heeft de gebruiker of client toegang tot Application Gateway met behulp van het IP-adres van de gateway of het BIJBEHORENDE DNS-adres. Het DNS-adres van Application Gateway vindt u op de overzichtspagina van het gekoppelde openbare IP-adres. Als er geen aangepast domein beschikbaar is, betekent dit dat er geen openbaar ondertekend certificaat beschikbaar is voor TLS op Application Gateway. Clients zijn beperkt tot het gebruik van HTTP of HTTPS met een zelfondertekend certificaat, die beide niet gewenst zijn.
Om verbinding te maken met App Service, gebruikt Application Gateway het standaarddomein zoals geleverd door App Service (achtervoegsel 'azurewebsites.net').
In de vervolgkeuzelijst worden alleen de app-services ingevuld die zich in hetzelfde abonnement bevinden als uw Application Gateway. Als u een app-service wilt gebruiken die zich in een ander abonnement bevindt dan het abonnement waarin application gateway zich bevindt, kiest u in plaats van App Services te kiezen in de vervolgkeuzelijst Doelen, kiest u HET IP-adres of de hostnaamoptie en voert u de hostnaam (example.azurewebsites.net) van de app-service in.
Selecteer Opslaan.
# 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
Er is een HTTP-instelling vereist waarmee Application Gateway toegang krijgt tot de App Service-back-end met behulp van de aangepaste domeinnaam. De HTTP-instelling gebruikt standaard de standaardstatustest. Terwijl standaardstatustests aanvragen doorsturen met de hostnaam waarin verkeer wordt ontvangen, gebruiken de statustests 127.0.0.1 als hostnaam naar de back-endpool omdat er geen hostnaam expliciet is gedefinieerd. Daarom moeten we een aangepaste statustest maken die is geconfigureerd met de juiste aangepaste domeinnaam als hostnaam.
We maken verbinding met de back-end via HTTPS.
Selecteer onder HTTP-instellingen een bestaande HTTP-instelling of voeg een nieuwe toe.
Wanneer u een nieuwe HTTP-instelling maakt, geeft u deze een naam
Selecteer HTTPS als het gewenste back-endprotocol met poort 443
Zorg ervoor dat u 'Overschrijven met nieuwe hostnaam' instelt op Nee
Selecteer de aangepaste HTTPS-statustest in de vervolgkeuzelijst voor 'Aangepaste test'.
Er is een HTTP-instelling vereist waarmee Application Gateway toegang krijgt tot de App Service-back-end met behulp van de standaarddomeinnaam ('azurewebsites.net'). Hiervoor overschrijft de HTTP-instelling expliciet de hostnaam.
Selecteer onder HTTP-instellingen een bestaande HTTP-instelling of voeg een nieuwe toe.
Wanneer u een nieuwe HTTP-instelling maakt, geeft u deze een naam
Selecteer HTTPS als het gewenste back-endprotocol met poort 443
Zorg ervoor dat u 'Overschrijven met nieuwe hostnaam' instelt op Ja
Selecteer onder Hostnaam overschrijven de optie Hostnaam uit back-enddoel kiezen. Deze instelling zorgt ervoor dat de aanvraag naar App Service de hostnaam 'azurewebsites.net' gebruikt, zoals is geconfigureerd in de back-endpool.
# 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
Open de sectie Listeners en kies Listener toevoegen of klik op een bestaande om te bewerken
Voor een nieuwe listener: geef deze een naam
Selecteer onder Front-end-IP het IP-adres waarop u wilt luisteren
Selecteer onder Poort 443
Selecteer onder Protocol de optie HTTPS
Selecteer onder Een certificaat kiezen de optie Een certificaat kiezen uit Key Vault. Zie Key Vault gebruiken voor meer informatie, waar u meer informatie vindt over het toewijzen van een beheerde identiteit en het verlenen van rechten aan uw Key Vault.
Geef het certificaat een naam
De beheerde identiteit selecteren
Selecteer de Sleutelkluis van waaruit u het certificaat wilt ophalen
Het certificaat selecteren
Selecteer Onder ListenerType de optie Basic
Klik op Toevoegen om de listener toe te voegen
Ervan uitgaande dat er geen aangepast domein beschikbaar of gekoppeld certificaat is, configureren we Application Gateway om te luisteren naar HTTP-verkeer op poort 80. U kunt ook de instructies voor het maken van een zelfondertekend certificaat bekijken
Open de sectie Listeners en kies Listener toevoegen of klik op een bestaande om te bewerken
Voor een nieuwe listener: geef deze een naam
Selecteer onder Front-end-IP het IP-adres waarop u wilt luisteren
Selecteer onder Poort 80
Selecteer onder Protocol de optie HTTP
# 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 veel gevallen bestaat er al een openbare listener voor HTTP op poort 80. Het onderstaande script maakt er een als dat nog niet het geval is.
$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
}
Regel voor aanvraagroutering configureren
Met behulp van de eerder geconfigureerde back-endpool en de HTTP-instellingen kan de regel voor aanvraagroutering worden ingesteld om verkeer van een listener te halen en door te sturen naar de back-endpool met behulp van de HTTP-instellingen. Zorg ervoor dat er een HTTP- of HTTPS-listener beschikbaar is die nog niet is gebonden aan een bestaande routeringsregel.
Open de sectie 'Back-endstatus' en zorg ervoor dat de kolom Status de combinatie voor HTTP-instelling en back-endpool aangeeft als 'In orde'.
Blader nu naar de webtoepassing met behulp van het IP-adres van application gateway of de bijbehorende DNS-naam voor het IP-adres. Beide zijn te vinden op de pagina Overzicht van Application Gateway als een eigenschap onder Essentials. De resource openbaar IP-adres bevat ook het IP-adres en de bijbehorende DNS-naam.
Let op de volgende niet-volledige lijst met mogelijke symptomen bij het testen van de toepassing:
omleidingen die rechtstreeks naar .azurewebsites.net verwijzen in plaats van naar Application Gateway
dit omvat verificatieomleidingen die rechtstreeks toegang proberen te krijgen tot .azurewebsites.net
domeingebonden cookies worden niet doorgegeven aan de back-end
dit omvat het gebruik van de instelling ARR-affiniteit in App Service
De bovenstaande voorwaarden (in meer detail uitgelegd in Architecture Center) geven aan dat uw webtoepassing niet goed omgaat met het herschrijven van de hostnaam. Dit wordt vaak gezien. De aanbevolen manier om hiermee om te gaan, is door de instructies voor de configuratie van Application Gateway met App Service te volgen met behulp van een aangepast domein. Zie ook: Problemen met App Service in Application Gateway oplossen.
Open de sectie 'Back-endstatus' en zorg ervoor dat de kolom Status de combinatie voor HTTP-instelling en back-endpool aangeeft als 'In orde'.
Blader nu naar de webtoepassing met behulp van het aangepaste domein dat u hebt gekoppeld aan Zowel Application Gateway als de App Service in de back-end.
Controleer of de back-endstatus voor de back-end- en HTTP-instellingen als 'In orde' wordt weergegeven:
$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
Om de configuratie te testen, vragen we inhoud van de App Service via Application Gateway aan met behulp van het aangepaste domein:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Controleer of de back-endstatus voor de back-end- en HTTP-instellingen als 'In orde' wordt weergegeven:
$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
Om de configuratie te testen, vragen we inhoud van de App Service via Application Gateway aan met behulp van het IP-adres:
$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)"
Let op de volgende niet-volledige lijst met mogelijke symptomen bij het testen van de toepassing:
omleidingen die rechtstreeks naar .azurewebsites.net verwijzen in plaats van naar Application Gateway
domeingebonden cookies worden niet doorgegeven aan de back-end
dit omvat het gebruik van de instelling ARR-affiniteit in App Service
De bovenstaande voorwaarden (in meer detail uitgelegd in Architecture Center) geven aan dat uw webtoepassing niet goed omgaat met het herschrijven van de hostnaam. Dit wordt vaak gezien. De aanbevolen manier om hiermee om te gaan, is door de instructies voor de configuratie van Application Gateway met App Service te volgen met behulp van een aangepast domein. Zie ook: Problemen met App Service in Application Gateway oplossen.
Toegang beperken
De web-apps die in deze voorbeelden zijn geïmplementeerd, gebruiken openbare IP-adressen die rechtstreeks vanaf internet kunnen worden geopend. Dit helpt bij het oplossen van problemen wanneer u leert over een nieuwe functie en nieuwe dingen probeert. Maar als u van plan bent om een functie in productie te implementeren, wilt u meer beperkingen toevoegen. Overweeg de volgende opties:
Toegangsbeperkingsregels configureren op basis van service-eindpunten. Hiermee kunt u binnenkomende toegang tot de app vergrendelen om ervoor te zorgen dat het bronadres afkomstig is van Application Gateway.
Gebruik statische IP-beperkingen voor Azure-app Service. U kunt bijvoorbeeld de web-app beperken zodat deze alleen verkeer van de toepassingsgateway ontvangt. Gebruik de ip-beperkingsfunctie van app service om het VIP van de toepassingsgateway weer te geven als het enige adres met toegang.