Med 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 kommer att 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 ".azurewebsites.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å standarddomänen ".azurewebsites".
Genom att associera samma domännamn med både Application Gateway och App Service i serverdelspoolen behöver begärandeflödet inte åsidosätta värdnamnet. Serverdelswebbprogrammet 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 måste värdhuvudet på den inkommande begäran i webbprogrammet anges till standarddomänen, suffixet med ".azurewebsites.net", annars kommer plattformen inte att kunna dirigera begäran korrekt.
Värdhuvudet i den ursprungliga begäran som togs emot av Application Gateway skiljer sig från värdnamnet för serverdelsapptjänsten.
I den här artikeln lär du dig att:
Konfigurera DNS
Lägga till App Service som serverdelspool i Application Gateway
Konfigurera HTTP-inställningar för anslutningen till App Service
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-post 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-poster. 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 kommer att vara 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").
I Azure-portalen 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.
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
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 som standard standard hälsoavsökningen. Standardhälsoavsökningar vidarebefordrar begäranden med värdnamnet där trafiken tas emot, men hälsoavsökningarna använder 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
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
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ålet". 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
Öppna avsnittet Lyssnare och välj Lägg till lyssnare eller klicka på en befintlig för att redigera
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 "Basic"
Klicka på Lägg till för att lägga till lyssnaren
Förutsatt att det inte finns någon anpassad domän tillgänglig eller associerat certifikat konfigurerar vi 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 klicka på en befintlig för att redigera
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 redan 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
}
Konfigurera routningsregel för begäranden
Med hjälp av den tidigare konfigurerade serverdelspoolen och HTTP-inställningarna kan du konfigurera routningsregeln för begäran 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.
Öppna avsnittet "Serverdelshälsa" och se till att kolumnen "Status" anger kombinationen för HTTP-inställning och Serverdelspoolen 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-uttö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 autentiseringsomdirigeringar som försöker komma åt ".azurewebsites.net" direkt
domänbundna cookies skickas inte vidare till serverdelen
detta inkluderar användningen av inställningen "ARR-tillhörighet" 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 kombinationen för HTTP-inställning och Serverdelspoolen 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-uttö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
domänbundna cookies skickas inte vidare till serverdelen
detta inkluderar användningen av inställningen "ARR-tillhörighet" 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.
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:
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.