Met Azure Application Gateway kunt u een App Service-app of een andere multitenant-service hebben als lid van de 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 kan worden 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 '.azurewebsite.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 een aangepast domein (en een daaraan gekoppeld certificaat) beschikbaar hebben om te voorkomen dat u op het standaard ".Azurewebsite"-domein moet vertrouwen.
Als dezelfde domeinnaam wordt toegewezen aan zowel de Application Gateway als de App Service in de back-endpool, hoeft de verzoekstroom 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: de hostheader op de binnenkomende aanvraag in de webtoepassing moet 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 is 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
- Een HTTP-listener configureren
- Een regel voor aanvraagroutering configureren
Vereiste voorwaarden
DNS configureren
In de context van dit scenario is DNS op twee plaatsen relevant:
- De DNS-naam, die de gebruiker of client gebruikt in de richting van Application Gateway en wat wordt weergegeven in een browser
- De DNS-naam, die Application Gateway intern gebruikt voor toegang tot de App Service in de back-end
Routeer de gebruiker of client naar Application Gateway met behulp van het aangepaste domein. Stel DNS in met behulp van een CNAME-alias die verwijst naar de DNS voor de 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 zo worden geconfigureerd dat het verkeer van Application Gateway accepteert, waarbij de aangepaste domeinnaam als binnenkomende host wordt gebruikt. 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.
Als u verbindingen met App Service via HTTPS wilt accepteren, configureert u de TLS-binding. Zie Een aangepaste DNS-naam beveiligen met een TLS/SSL-binding in Azure App Service App Service App Service configureren om het certificaat voor het aangepaste domein op te halen uit Azure Key Vault voor meer informatie.
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 in 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').
App Service toevoegen als back-endpool
Selecteer uw Toepassingsgateway in Azure Portal.
Selecteer onder Back-endpools de back-endpool.
Selecteer App Services onder Doeltype.
Selecteer uw App Service onder Doel .
Opmerking
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. Als u privé-eindpunten gebruikt met uw App Service, moet u in plaats daarvan de FQDN of het IP-adres van het privé-eindpunt gebruiken.
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
HTTP-instellingen voor App Service bewerken
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, kunnen de statustests gebruikmaken van 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
- Als het certificaat is ondertekend door een bekende instantie, selecteert u Ja voor 'Bekend CA-certificaat gebruiker'. U kunt ook verificatie/vertrouwde basiscertificaten van back-endservers toevoegen
- Zorg ervoor dat u 'Overschrijven met nieuwe hostnaam' instelt op Nee
- Selecteer de aangepaste HTTPS-statustest in de vervolgkeuzelijst voor 'Aangepaste test'.
Een HTTP-instelling is 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
- Als het certificaat is ondertekend door een bekende instantie, selecteert u Ja voor 'Bekend CA-certificaat gebruiker'. U kunt ook verificatie/vertrouwde basiscertificaten van back-endservers toevoegen
- 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
Om verkeer te accepteren, moeten we een listener configureren. Zie de listenerconfiguratie van Application Gateway voor meer informatie over listener.
- Open de sectie Listeners en kies Listener toevoegen of selecteer een bestaande die u wilt 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 Kies een certificaat 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
- Selecteer Toevoegen om de listener toe te voegen
Ervan uitgaande dat er geen aangepast domein beschikbaar of gekoppeld certificaat is, configureert u 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 selecteer een bestaande die u wilt bewerken
- Voor een nieuwe listener: geef deze een naam
- Selecteer onder Front-end-IP het IP-adres waarop u wilt luisteren
- Selecteer 80 onder Poort
- 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 een openbare listener voor HTTP op poort 80. Met het onderstaande script wordt er een gemaakt 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
}
De eerder geconfigureerde back-endpool en de HTTP-instellingen, de regel voor aanvraagroutering kan worden ingesteld om verkeer van een listener te halen en deze naar de back-endpool te routeren 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.
- Selecteer onder 'Regels' om een nieuwe regel voor doorsturen van aanvragen toe te voegen
- Geef de regel een naam
- Selecteer een HTTP- of HTTPS-listener die nog niet is gebonden aan een bestaande routeringsregel
- Kies onder Back-enddoelen de back-endpool waarin App Service is geconfigureerd
- De HTTP-instellingen configureren waarmee Application Gateway verbinding moet maken met de App Service-back-end
- Selecteer Toevoegen om deze configuratie op te slaan
$rgName = "<name of resource group for App Gateway>"
$appGwName = "<name of the App Gateway>"
$httpListenerName = "<name for existing http listener (without rule) to route traffic from>"
$httpSettingsName = "<name for http settings to use>"
$appGwBackendPoolNameForAppSvc = "<name for backend pool to route to>"
$reqRoutingRuleName = "<name for request routing rule to be added>"
# Get existing Application Gateway:
$gw = Get-AzApplicationGateway -Name $appGwName -ResourceGroupName $rgName
# Get HTTP Settings:
$httpListener = Get-AzApplicationGatewayHttpListener -Name $httpListenerName -ApplicationGateway $gw
$httpSettings = Get-AzApplicationGatewayBackendHttpSettings -Name $httpSettingsName -ApplicationGateway $gw
$backendPool = Get-AzApplicationGatewayBackendAddressPool -Name $appGwBackendPoolNameForAppSvc -ApplicationGateway $gw
# Add routing rule:
Add-AzApplicationGatewayRequestRoutingRule -Name $reqRoutingRuleName -ApplicationGateway $gw -RuleType Basic -BackendHttpSettings $httpSettings -HttpListener $httpListener -BackendAddressPool $backendPool
# Update Application Gateway with the new routing rule:
Set-AzApplicationGateway -ApplicationGateway $gw
Testen
Voordat u dit doet, moet u ervoor zorgen dat de backend-status als gezond wordt weergegeven.
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 de Application Gateway als een eigenschap bij "Essentials." Als alternatief toont de resource voor het Publiek IP-adres ook het IP-adres en de bijbehorende DNS-naam.
Let op de volgende niet-bestaande lijst met mogelijke symptomen bij het testen van de toepassing:
- omleidingen die rechtstreeks naar .azurewebsite.net verwijzen in plaats van naar Application Gateway
- bevat verificatieomleidingen die rechtstreeks toegang proberen te krijgen tot .azurewebsite.net
- domeingebonden cookies worden niet doorgegeven aan de back-end
- het gebruik van de instelling ARR-affiniteit in App Service opnemen
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-bestaande 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 App Service Authentication-omleidingen 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 met deze voorwaarde 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 een functie in productie te implementeren, wilt u meer beperkingen toevoegen. Houd rekening met de volgende opties: