Konfigurowanie usługi App Service z usługą Application Gateway
Artykuł
Usługa Application Gateway umożliwia posiadanie aplikacji usługi App Service lub innej usługi wielodostępnej jako członka puli zaplecza. Z tego artykułu dowiesz się, jak skonfigurować aplikację usługi App Service za pomocą usługi Application Gateway. Konfiguracja usługi Application Gateway będzie się różnić w zależności od sposobu uzyskiwania dostępu do usługi App Service:
Pierwsza opcja korzysta z domeny niestandardowej zarówno w usłudze Application Gateway, jak i w usłudze App Service w zapleczu.
Drugą opcją jest uzyskanie dostępu do usługi App Service w usłudze Application Gateway przy użyciu jej domeny domyślnej, sufiksu jako ".azurewebsites.net".
Ta konfiguracja jest zalecana w scenariuszach klasy produkcyjnej i spełnia praktykę braku zmiany nazwy hosta w przepływie żądania. Musisz mieć dostęp do domeny niestandardowej (i skojarzonego certyfikatu), aby uniknąć konieczności polegania na domyślnej domenie ".azurewebsites".
Kojarząc tę samą nazwę domeny zarówno z usługą Application Gateway, jak i usługą App Service w puli zaplecza, przepływ żądania nie musi zastępować nazwy hosta. Aplikacja internetowa zaplecza zobaczy oryginalnego hosta, który był używany przez klienta.
Ta konfiguracja jest najprostsza i nie wymaga domeny niestandardowej. W związku z tym umożliwia szybką wygodną konfigurację.
Jeśli usługa App Service nie ma skojarzonej z nią domeny niestandardowej, nagłówek hosta w żądaniu przychodzącym w aplikacji internetowej musi być ustawiony na domenę domyślną, sufiks z ciągiem ".azurewebsites.net" lub w przeciwnym razie platforma nie będzie mogła prawidłowo kierować żądania.
Nagłówek hosta w oryginalnym żądaniu odebrany przez usługę Application Gateway różni się od nazwy hosta usługi App Service zaplecza.
Z tego artykułu dowiesz się, jak wykonywać następujące działania:
Konfigurowanie systemu DNS
Dodawanie usługi App Service jako puli zaplecza do usługi Application Gateway
Konfigurowanie ustawień protokołu HTTP dla połączenia z usługą App Service
App Service: jeśli nie masz istniejącej usługi App Service, zobacz dokumentację usługi App Service.
Niestandardowa nazwa domeny i skojarzony certyfikat (podpisany przez dobrze znany urząd) przechowywany w usłudze Key Vault. Aby uzyskać więcej informacji na temat przechowywania certyfikatów w usłudze Key Vault, zobacz Samouczek: importowanie certyfikatu w usłudze Azure Key Vault
Kierowanie użytkownika lub klienta do usługi Application Gateway przy użyciu domeny niestandardowej. Konfigurowanie systemu DNS przy użyciu aliasu CNAME wskazywanego na dns dla usługi Application Gateway. Adres DNS usługi Application Gateway jest wyświetlany na stronie przeglądu skojarzonego publicznego adresu IP. Alternatywnie utwórz rekord A wskazujący bezpośrednio adres IP. (W przypadku usługi Application Gateway w wersji 1 adres VIP może ulec zmianie, jeśli zatrzymasz i uruchomisz usługę, co sprawia, że ta opcja jest niepożądane).
Usługa App Service powinna być skonfigurowana tak, aby akceptowała ruch z usługi Application Gateway przy użyciu niestandardowej nazwy domeny jako hosta przychodzącego. Aby uzyskać więcej informacji na temat mapowania domeny niestandardowej na usługę App Service, zobacz Samouczek: mapowania istniejącej niestandardowej nazwy DNS na usługę aplikacja systemu Azure Aby zweryfikować domenę, usługa App Service wymaga tylko dodania rekordu TXT. W rekordach CNAME lub A nie jest wymagana żadna zmiana. Konfiguracja DNS domeny niestandardowej pozostanie skierowana do usługi Application Gateway.
Jeśli domena niestandardowa nie jest dostępna, użytkownik lub klient może uzyskać dostęp do usługi Application Gateway przy użyciu adresu IP bramy lub jego adresu DNS. Adres DNS usługi Application Gateway można znaleźć na stronie przeglądu skojarzonego publicznego adresu IP. Brak dostępnej domeny niestandardowej oznacza, że w usłudze Application Gateway nie będzie dostępny certyfikat z podpisem publicznym. Klienci są ograniczeni do używania protokołu HTTP lub HTTPS z certyfikatem z podpisem własnym, z których oba są niepożądane.
Aby nawiązać połączenie z usługą App Service, usługa Application Gateway używa domeny domyślnej udostępnionej przez usługę App Service (sufiks "azurewebsites.net").
W witrynie Azure Portal wybierz swoją usługę Application Gateway.
W obszarze Pule zaplecza wybierz pulę zaplecza.
W obszarze Typ docelowy wybierz pozycję App Services.
W obszarze Cel wybierz usługę App Service.
Uwaga
Lista rozwijana wypełnia tylko te usługi aplikacji, które znajdują się w tej samej subskrypcji co usługa Application Gateway. Jeśli chcesz użyć usługi app Service, która znajduje się w innej subskrypcji niż ta, w której znajduje się usługa Application Gateway, zamiast wybierać usługi App Services na liście rozwijanej Cele , wybierz opcję Adres IP lub nazwa hosta i wprowadź nazwę hosta (example.azurewebsites.net) usługi app Service.
Wybierz pozycję Zapisz.
# 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
Edytowanie ustawień protokołu HTTP dla usługi App Service
Ustawienie HTTP jest wymagane, aby usługa Application Gateway mogła uzyskać dostęp do zaplecza usługi App Service przy użyciu niestandardowej nazwy domeny. Ustawienie HTTP będzie domyślnie używać domyślnej sondy kondycji. Podczas gdy domyślne sondy kondycji będą przekazywać żądania z nazwą hosta, w której jest odbierany ruch, sondy kondycji będą wykorzystywać 127.0.0.1 jako nazwę hosta do puli zaplecza, ponieważ nie zdefiniowano jawnie nazwy hosta. Z tego powodu musimy utworzyć niestandardową sondę kondycji skonfigurowaną przy użyciu poprawnej niestandardowej nazwy domeny jako nazwy hosta.
Połączymy się z zapleczem przy użyciu protokołu HTTPS.
W obszarze Ustawienia PROTOKOŁU HTTP wybierz istniejące ustawienie HTTP lub dodaj nowe.
Podczas tworzenia nowego ustawienia PROTOKOŁU HTTP nadaj mu nazwę
Wybierz protokół HTTPS jako żądany protokół zaplecza przy użyciu portu 443
Upewnij się, że ustawiono wartość "Przesłoń z nową nazwą hosta" na "Nie"
Wybierz niestandardową sondę kondycji HTTPS z listy rozwijanej "Sonda niestandardowa".
Ustawienie HTTP jest wymagane, aby usługa Application Gateway mogła uzyskać dostęp do zaplecza usługi App Service przy użyciu domyślnej nazwy domeny ("azurewebsites.net"). W tym celu ustawienie HTTP jawnie zastąpi nazwę hosta.
W obszarze Ustawienia PROTOKOŁU HTTP wybierz istniejące ustawienie HTTP lub dodaj nowe.
Podczas tworzenia nowego ustawienia PROTOKOŁU HTTP nadaj mu nazwę
Wybierz protokół HTTPS jako żądany protokół zaplecza przy użyciu portu 443
Upewnij się, że ustawiono opcję "Przesłoń z nową nazwą hosta" na wartość "Tak"
W obszarze "Zastąpienie nazwy hosta" wybierz pozycję "Wybierz nazwę hosta z obiektu docelowego zaplecza". To ustawienie spowoduje, że żądanie do usługi App Service będzie używać nazwy hosta "azurewebsites.net", tak jak skonfigurowano w puli zaplecza.
# 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
Konfigurowanie odbiornika HTTP
Aby zaakceptować ruch, należy skonfigurować odbiornik. Aby uzyskać więcej informacji na ten temat, zobacz Konfiguracja odbiornika usługi Application Gateway.
Otwórz sekcję "Odbiorniki" i wybierz pozycję "Dodaj odbiornik" lub kliknij istniejącą, aby edytować
Dla nowego odbiornika: nadaj mu nazwę
W obszarze "Adres IP frontonu" wybierz adres IP do nasłuchiwania
W obszarze "Port" wybierz pozycję 443
W obszarze "Protokół" wybierz pozycję "HTTPS"
W obszarze "Wybierz certyfikat" wybierz pozycję "Wybierz certyfikat z usługi Key Vault". Aby uzyskać więcej informacji, zobacz Using Key Vault (Korzystanie z usługi Key Vault ), gdzie można znaleźć więcej informacji na temat przypisywania tożsamości zarządzanej i dostarczania jej praw do usługi Key Vault.
Nadaj certyfikatowi nazwę
Wybierz tożsamość zarządzaną
Wybierz usługę Key Vault z miejsca, w którym chcesz uzyskać certyfikat
Wybieranie certyfikatu
W obszarze "Typ odbiornika" wybierz pozycję "Podstawowa"
Kliknij pozycję "Dodaj", aby dodać odbiornik
Zakładając, że nie ma dostępnej domeny niestandardowej ani skojarzonego certyfikatu, skonfigurujemy usługę Application Gateway tak, aby nasłuchiwać ruchu HTTP na porcie 80. Możesz też zapoznać się z instrukcjami dotyczącymi tworzenia certyfikatu z podpisem własnym
Otwórz sekcję "Odbiorniki" i wybierz pozycję "Dodaj odbiornik" lub kliknij istniejącą, aby edytować
Dla nowego odbiornika: nadaj mu nazwę
W obszarze "Adres IP frontonu" wybierz adres IP do nasłuchiwania
W obszarze "Port" wybierz pozycję 80
W obszarze "Protokół" wybierz pozycję "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
W wielu przypadkach publiczny odbiornik HTTP na porcie 80 już istnieje. Poniższy skrypt utworzy go, jeśli jeszcze tak nie jest.
$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
}
Konfigurowanie reguły routingu żądań
Korzystając z wcześniej skonfigurowanej puli zaplecza i ustawień PROTOKOŁU HTTP, regułę routingu żądań można skonfigurować tak, aby ruch z odbiornika był kierowany do puli zaplecza przy użyciu ustawień PROTOKOŁU HTTP. W tym celu upewnij się, że masz dostępny odbiornik HTTP lub HTTPS, który nie jest jeszcze powiązany z istniejącą regułą routingu.
Otwórz sekcję "Kondycja zaplecza" i upewnij się, że kolumna "Stan" wskazuje kombinację ustawień HTTP i puli zaplecza wyświetlanych jako "W dobrej kondycji".
Teraz przejdź do aplikacji internetowej przy użyciu adresu IP usługi Application Gateway lub skojarzonej nazwy DNS dla adresu IP. Oba te elementy można znaleźć na stronie "Przegląd" usługi Application Gateway jako właściwości w obszarze "Podstawy". Alternatywnie zasób Publiczny adres IP zawiera również adres IP i skojarzona nazwa DNS.
Zwróć uwagę na następującą nieuczerpną listę potencjalnych objawów podczas testowania aplikacji:
przekierowania wskazujące "azurewebsites.net" bezpośrednio zamiast do usługi Application Gateway
Obejmuje to przekierowania uwierzytelniania, które próbują uzyskać bezpośredni dostęp do pliku ".azurewebsites.net"
pliki cookie powiązane z domeną nie są przekazywane do zaplecza
Obejmuje to użycie ustawienia "Koligacja ARR" w usłudze App Service
Powyższe warunki (wyjaśnione bardziej szczegółowo w Centrum architektury) wskazują, że aplikacja internetowa nie radzi sobie dobrze z ponownym zapisywaniem nazwy hosta. Jest to często spotykane. Zalecanym sposobem radzenia sobie z tym jest wykonanie instrukcji dotyczących konfiguracji usługi Application Gateway z usługą App Service przy użyciu domeny niestandardowej. Zobacz również: Rozwiązywanie problemów z usługą App Service w usłudze Application Gateway.
Otwórz sekcję "Kondycja zaplecza" i upewnij się, że kolumna "Stan" wskazuje kombinację ustawień HTTP i puli zaplecza wyświetlanych jako "W dobrej kondycji".
Teraz przejdź do aplikacji internetowej przy użyciu domeny niestandardowej skojarzonej zarówno z usługą Application Gateway, jak i usługą App Service w zapleczu.
Sprawdź, czy kondycja zaplecza dla zaplecza i ustawień HTTP jest wyświetlana jako "W dobrej kondycji":
$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
Aby przetestować konfigurację, zażądamy zawartości z usługi App Service za pośrednictwem usługi Application Gateway przy użyciu domeny niestandardowej:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Sprawdź, czy kondycja zaplecza dla zaplecza i ustawień HTTP jest wyświetlana jako "W dobrej kondycji":
$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
Aby przetestować konfigurację, zażądamy zawartości z usługi App Service za pośrednictwem usługi Application Gateway przy użyciu adresu 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)"
Zwróć uwagę na następującą nieuczerpną listę potencjalnych objawów podczas testowania aplikacji:
przekierowania wskazujące "azurewebsites.net" bezpośrednio zamiast do usługi Application Gateway
pliki cookie powiązane z domeną nie są przekazywane do zaplecza
Obejmuje to użycie ustawienia "Koligacja ARR" w usłudze App Service
Powyższe warunki (wyjaśnione bardziej szczegółowo w Centrum architektury) wskazują, że aplikacja internetowa nie radzi sobie dobrze z ponownym zapisywaniem nazwy hosta. Jest to często spotykane. Zalecanym sposobem radzenia sobie z tym jest wykonanie instrukcji dotyczących konfiguracji usługi Application Gateway z usługą App Service przy użyciu domeny niestandardowej. Zobacz również: Rozwiązywanie problemów z usługą App Service w usłudze Application Gateway.
Ograniczanie dostępu
Aplikacje internetowe wdrożone w tych przykładach używają publicznych adresów IP, do których można uzyskać dostęp bezpośrednio z Internetu. Ułatwia to rozwiązywanie problemów podczas poznawania nowej funkcji i próby nowych rzeczy. Jeśli jednak zamierzasz wdrożyć funkcję w środowisku produkcyjnym, należy dodać więcej ograniczeń. Rozważ następujące opcje:
Użyj ograniczeń statycznych adresów IP usługi aplikacja systemu Azure Service. Można na przykład ograniczyć aplikację internetową tak, aby odbierała ruch tylko z bramy aplikacji. Użyj funkcji ograniczeń adresu IP usługi App Service, aby wyświetlić adres VIP bramy aplikacji jako jedyny adres z dostępem.