Med Azure Application Gateway kan du ha en App Service-app eller en annan tjänst för flera klientorganisationer som medlem i serverdelspoolen. I den här artikeln lär du dig att konfigurera en App Service-app med Application Gateway. Konfigurationen för Application Gateway varierar beroende på hur App Service kan nås:
- Det första alternativet använder en anpassad domän på både Application Gateway och App Service i serverdelen.
- Det andra alternativet är att ha Application Gateway-åtkomst till App Service med dess standarddomän, suffixet ".azurewebsite.net".
Den här konfigurationen rekommenderas för scenarier i produktionsklass och uppfyller praxisen att inte ändra värdnamnet i begärandeflödet. Du måste ha en anpassad domän (och associerat certifikat) tillgänglig för att undvika att behöva förlita dig på standardvärdet ". Azurewebsite"-domän.
Samma domännamn för både Application Gateway och App Service i serverdelspoolen, och begärandeflödet behöver inte åsidosätta värdnamnet. Backend-webbapplikationen ser den ursprungliga värden som användes av klienten.
Den här konfigurationen är den enklaste och kräver ingen anpassad domän. Som sådan möjliggör det en snabb och bekväm konfiguration.
När App Service inte har någon anpassad domän associerad med den: värdhuvudet på den inkommande begäran i webbprogrammet måste vara inställt på standarddomänen, suffixet med ".azurewebsites.net", annars kan plattformen inte dirigera begäran korrekt.
Värdhuvudet i den ursprungliga begäran som mottagits av Application Gateway skiljer sig från värdnamnet för backendtjänsten i App Service.
I den här artikeln lär du dig hur du:
- Konfigurera DNS
- Lägga till App Service som serverdelspool i Application Gateway
- Konfigurera HTTP-inställningar för anslutningen till App Service
- Konfigurera en HTTP-lyssnare
- Konfigurera en routningsregel för begäran
Förutsättningar
Konfigurera DNS
I det här scenariot är DNS relevant på två platser:
- DNS-namnet, som användaren eller klienten använder mot Application Gateway och vad som visas i en webbläsare
- DNS-namnet, som Application Gateway använder internt för att komma åt App Service i backend-delen
Dirigera användaren eller klienten till Application Gateway med den anpassade domänen. Konfigurera DNS med ett CNAME-alias som pekar på DNS för Application Gateway. Application Gateway DNS-adressen visas på översiktssidan för den associerade offentliga IP-adressen. Du kan också skapa en A-record som pekar direkt på IP-adressen. (För Application Gateway V1 kan VIP:en ändras om du stoppar och startar tjänsten, vilket gör det här alternativet oönstrade.)
App Service bör konfigureras så att den accepterar trafik från Application Gateway med det anpassade domännamnet som inkommande värd. Mer information om hur du mappar en anpassad domän till App Service finns i Självstudie: Mappa ett befintligt anpassat DNS-namn till Azure App Service För att verifiera domänen behöver App Service bara lägga till en TXT-post. Ingen ändring krävs för CNAME eller A-uppgifter. DNS-konfigurationen för den anpassade domänen förblir riktad mot Application Gateway.
Om du vill acceptera anslutningar till App Service via HTTPS konfigurerar du dess TLS-bindning. Mer information finns i Skydda ett anpassat DNS-namn med en TLS/SSL-bindning i Azure App Service Konfigurera App Service för att hämta certifikatet för den anpassade domänen från Azure Key Vault.
När ingen anpassad domän är tillgänglig kan användaren eller klienten komma åt Application Gateway med antingen IP-adressen för gatewayen eller dess DNS-adress. Dns-adressen för Application Gateway finns på översiktssidan för den associerade offentliga IP-adressen. Att inte ha en anpassad domän tillgänglig innebär att inget offentligt signerat certifikat inte är tillgängligt för TLS på Application Gateway. Klienter är begränsade till att använda HTTP eller HTTPS med ett självsignerat certifikat, som båda är oönskade.
För att ansluta till App Service använder Application Gateway standarddomänen enligt App Service (suffixet "azurewebsites.net").
Lägga till App Service som serverdelspool
I Azure Portal väljer du din Application Gateway.
Under Serverdelspooler väljer du serverdelspoolen.
Under Måltyp väljer du App Services.
Under Mål väljer du din App Service.
Kommentar
Listrutan fyller bara i de apptjänster som finns i samma prenumeration som din Application Gateway. Om du vill använda en apptjänst som finns i en annan prenumeration än den där Application Gateway är väljer du IP-adress eller värdnamn i stället för att välja App Services i listrutan Mål och anger värdnamnet (example.azurewebsites.net) för apptjänsten. Om du använder privata slutpunkter med din App Service bör du använda den privata slutpunktens FQDN eller IP-adress i stället.
Välj Spara.
# 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
Redigera HTTP-inställningar för App Service
En HTTP-inställning krävs som instruerar Application Gateway att komma åt App Service-serverdelen med det anpassade domännamnet. HTTP-inställningen använder standardmässigt standardhälsoavsökningen. Standardhälsoavsökningar vidarebefordrar begäranden med värdnamnet där trafiken tas emot, men hälsoavsökningarna kan använda 127.0.0.1 som värdnamn till serverdelspoolen eftersom inget värdnamn uttryckligen har definierats. Därför måste vi skapa en anpassad hälsoavsökning som har konfigurerats med rätt anpassat domännamn som värdnamn.
Vi ansluter till serverdelen med HTTPS.
- Under HTTP-inställningar väljer du en befintlig HTTP-inställning eller lägger till en ny.
- När du skapar en ny HTTP-inställning ger du den ett namn
- Välj HTTPS som önskat serverdelsprotokoll med port 443
- Om certifikatet är signerat av en välkänd utfärdare väljer du "Ja" för "Användarens välkända CA-certifikat". Du kan också lägga till autentisering/betrodda rotcertifikat för serverdelsservrar
- Se till att ange "Åsidosätt med nytt värdnamn" till "Nej"
- Välj den anpassade HTTPS-hälsoavsökningen i listrutan för "Anpassad avsökning".
En HTTP-inställning krävs som instruerar Application Gateway att komma åt App Service-serverdelen med standarddomännamnet ("azurewebsites.net"). För att göra det åsidosätter HTTP-inställningen uttryckligen värdnamnet.
- Under HTTP-inställningar väljer du en befintlig HTTP-inställning eller lägger till en ny.
- När du skapar en ny HTTP-inställning ger du den ett namn
- Välj HTTPS som önskat serverdelsprotokoll med port 443
- Om certifikatet är signerat av en välkänd utfärdare, välj "Ja" för "Använd välkänd CA-certifikat". Du kan också lägga till autentisering/betrodda rotcertifikat för backendservrar
- Se till att ange "Åsidosättning med nytt värdnamn" till "Ja"
- Under Åsidosättning av värdnamn väljer du "Välj värdnamn från serverdelsmål". Den här inställningen gör att begäran mot App Service använder värdnamnet "azurewebsites.net", som har konfigurerats i serverdelspoolen.
# 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
För att acceptera trafik måste vi konfigurera en lyssnare. Mer information om lyssnaren finns i Application Gateway-lyssnarkonfiguration.
- Öppna avsnittet Lyssnare och välj Lägg till lyssnare eller välj en befintlig som ska redigeras
- För en ny lyssnare: ge den ett namn
- Under "Klientdels-IP" väljer du DEN IP-adress som ska lyssnas på
- Under "Port" väljer du 443
- Under "Protokoll" väljer du "HTTPS"
- Under "Välj ett certifikat" väljer du "Välj ett certifikat från Key Vault". Mer information finns i Använda Key Vault där du hittar mer information om hur du tilldelar en hanterad identitet och ger den behörighet till ditt Key Vault.
- Ge certifikatet ett namn
- Välj den hanterade identiteten
- Välj Key Vault varifrån certifikatet ska hämtas
- Välj certifikatet
- Under "Lyssnartyp" väljer du "Grundläggande"
- Välj Lägg till för att lägga till lyssnaren
Om det inte finns någon anpassad domän tillgänglig eller associerat certifikat konfigurerar du Application Gateway för att lyssna efter HTTP-trafik på port 80. Du kan också läsa anvisningarna om hur du skapar ett självsignerat certifikat
- Öppna avsnittet Lyssnare och välj Lägg till lyssnare eller välj en befintlig som ska redigeras
- För en ny lyssnare: ge den ett namn
- Under "Klientdels-IP" väljer du DEN IP-adress som ska lyssnas på
- Under "Port" väljer du 80
- Under "Protokoll" väljer du "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
I många fall finns det en offentlig lyssnare för HTTP på port 80. Skriptet nedan skapar ett om så inte är fallet ännu.
$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
}
Den tidigare konfigurerade serverdelspoolen och HTTP-inställningarna, begärandedirigeringsregeln kan konfigureras för att ta trafik från en lyssnare och dirigera den till serverdelspoolen med hjälp av HTTP-inställningarna. För detta kontrollerar du att du har en TILLGÄNGLIG HTTP- eller HTTPS-lyssnare som inte redan är bunden till en befintlig routningsregel.
- Under "Regler" väljer du för att lägga till en ny "Begärandedirigeringsregel"
- Ange regeln med ett namn
- Välj en HTTP- eller HTTPS-lyssnare som ännu inte är bunden till en befintlig routningsregel
- Under "Serverdelsmål" väljer du den serverdelspool där App Service har konfigurerats
- Konfigurera de HTTP-inställningar som Application Gateway ska använda för att ansluta till App Service-bakänden.
- Välj Lägg till för att spara den här konfigurationen
$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
Testning
Innan vi gör det kontrollerar du att serverdelshälsan visas som felfri:
Öppna avsnittet "Serverdelshälsa" och se till att kolumnen Status anger att kombinationen för HTTP-inställning och serverdelspool visas som "Felfri".
Bläddra nu till webbprogrammet med antingen Application Gateway IP-adress eller det associerade DNS-namnet för IP-adressen. Båda finns på sidan "Översikt" för Application Gateway som en egenskap under "Essentials". Alternativt visar resursen offentlig IP-adress även IP-adressen och det associerade DNS-namnet.
Var uppmärksam på följande icke-outtömmande lista över potentiella symtom när du testar programmet:
- omdirigeringar som pekar på ".azurewebsite.net" direkt i stället för till Application Gateway
- innehåller autentiseringsomdirigeringar som försöker komma åt ".azurewebsite.net" direkt
- domänbundna cookies skickas inte vidare till serverdelen
- inkludera användningen av inställningen "ARR affinity" i App Service
Ovanstående villkor (förklaras mer detaljerat i Architecture Center) tyder på att webbappen inte fungerar bra med att skriva om värdnamnet. Detta är vanligt förekommande. Det rekommenderade sättet att hantera detta är att följa anvisningarna för att konfigurera Application Gateway med App Service med hjälp av en anpassad domän. Se även: Felsöka App Service-problem i Application Gateway.
Öppna avsnittet "Serverdelshälsa" och se till att kolumnen Status anger att kombinationen för HTTP-inställning och serverdelspool visas som "Felfri".
Bläddra nu till webbprogrammet med hjälp av den anpassade domän som du har associerat med både Application Gateway och App Service i serverdelen.
Kontrollera om serverdelshälsan för serverdelen och HTTP-inställningarna visas som "Felfri":
$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
För att testa konfigurationen begär vi innehåll från App Service via Application Gateway med hjälp av den anpassade domänen:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Kontrollera om serverdelshälsan för serverdelen och HTTP-inställningarna visas som "Felfri":
$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
För att testa konfigurationen begär vi innehåll från App Service via Application Gateway med hjälp av IP-adressen:
$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)"
Var uppmärksam på följande icke-outtömmande lista över potentiella symtom när du testar programmet:
- omdirigeringar som pekar på ".azurewebsites.net" direkt i stället för till Application Gateway
- Detta inkluderar omdirigeringar av App Service-autentisering som försöker komma åt ".azurewebsites.net" direkt.
- domänbundna cookies skickas inte vidare till serverdelen
- detta inkluderar användning av inställningen "ARR affinity" i App Service
Ovanstående villkor (förklaras mer detaljerat i Architecture Center) tyder på att webbappen inte fungerar bra med att skriva om värdnamnet. Detta är vanligt förekommande. Det rekommenderade sättet att hantera det här villkoret är att följa anvisningarna för att konfigurera Application Gateway med App Service med hjälp av en anpassad domän. Se även: Felsöka App Service-problem i Application Gateway.
Begränsa åtkomst
Webbapparna som distribueras i dessa exempel använder offentliga IP-adresser som kan nås direkt från Internet. Detta hjälper dig med felsökning när du lär dig om en ny funktion och provar nya saker. Men om du tänker distribuera en funktion till produktion vill du lägga till fler begränsningar. Överväg följande alternativ:
- Konfigurera regler för åtkomstbegränsning baserat på tjänstslutpunkter. På så sätt kan du låsa inkommande åtkomst till appen och se till att källadressen kommer från Application Gateway.
- Använd statiska IP-begränsningar för Azure App Service. Du kan till exempel begränsa webbappen så att den bara tar emot trafik från programgatewayen. Använd funktionen ip-begränsning för apptjänsten för att lista programgatewayens VIP som den enda adressen med åtkomst.