Konfigurace služby App Service se službou Application Gateway
Článek
Application Gateway umožňuje mít aplikaci služby App Service nebo jinou službu s více tenanty jako člena back-endového fondu. V tomto článku se dozvíte, jak nakonfigurovat aplikaci služby App Service se službou Application Gateway. Konfigurace služby Application Gateway se bude lišit v závislosti na tom, jak bude služba App Service přístupná:
První možnost využívá vlastní doménu ve službě Application Gateway i ve službě App Service v back-endu.
Druhou možností je, aby služba Application Gateway měla přístup ke službě App Service pomocí výchozí domény s příponou .azurewebsites.net.
Tato konfigurace se doporučuje pro scénáře na úrovni produkčního prostředí a splňuje postup, kdy se v toku požadavků nemění název hostitele. Abyste nemuseli spoléhat na výchozí doménu ".azurewebsites", musíte mít k dispozici vlastní doménu (a přidružený certifikát).
Přidružením stejného názvu domény ke službě Application Gateway i službě App Service v back-endovém fondu nemusí tok požadavku přepsat název hostitele. Back-endová webová aplikace uvidí původního hostitele, jak ho používal klient.
Tato konfigurace je nejjednodušší a nevyžaduje vlastní doménu. Jako takový umožňuje rychlé pohodlné nastavení.
Pokud služba App Service nemá přidruženou vlastní doménu, hlavička hostitele příchozího požadavku ve webové aplikaci bude muset být nastavená na výchozí doménu, příponu s příponou .azurewebsites.net nebo jinak platforma nebude moct správně směrovat požadavek.
Hlavička hostitele v původním požadavku přijatém službou Application Gateway se bude lišit od názvu hostitele back-endové služby App Service.
V tomto článku se dozvíte, jak:
Konfigurace služby DNS
Přidání služby App Service jako back-endového fondu do služby Application Gateway
Konfigurace nastavení HTTP pro připojení ke službě App Service
App Service: Pokud nemáte existující službu App Service, přečtěte si dokumentaci ke službě App Service.
Vlastní název domény a přidružený certifikát (podepsaný dobře známou autoritou) uložený ve službě Key Vault. Další informace o ukládání certifikátů ve službě Key Vault najdete v kurzu : Import certifikátu ve službě Azure Key Vault.
Přesměrujte uživatele nebo klienta do služby Application Gateway pomocí vlastní domény. Nastavte DNS pomocí aliasu CNAME odkazovaného na DNS pro Službu Application Gateway. Adresa DNS služby Application Gateway se zobrazuje na stránce přehledu přidružené veřejné IP adresy. Případně můžete vytvořit záznam A odkazující přímo na IP adresu. (U služby Application Gateway V1 se virtuální IP adresa může změnit, pokud službu zastavíte a spustíte, takže tato možnost není požadovaná.)
Služba App Service by měla být nakonfigurovaná tak, aby přijímala provoz ze služby Application Gateway pomocí vlastního názvu domény jako příchozího hostitele. Další informace o tom, jak namapovat vlastní doménu na službu App Service, najdete v kurzu: Mapování existujícího vlastního názvu DNS na službu Aplikace Azure Service k ověření domény vyžaduje App Service pouze přidání záznamu TXT. U CNAME nebo A-records se nevyžaduje žádná změna. Konfigurace DNS pro vlastní doménu zůstane směrovaná na službu Application Gateway.
Pokud není k dispozici žádná vlastní doména, může uživatel nebo klient přistupovat ke službě Application Gateway pomocí IP adresy brány nebo její adresy DNS. Adresu DNS služby Application Gateway najdete na stránce přehledu přidružené veřejné IP adresy. Nemáte k dispozici vlastní doménu, znamená to, že ve službě Application Gateway nebude k dispozici žádný veřejně podepsaný certifikát. Klienti jsou omezeni na použití protokolu HTTP nebo HTTPS s certifikátem podepsaným svým držitelem, z nichž oba nejsou žádoucí.
Aby se služba Application Gateway připojila ke službě App Service, používá výchozí doménu poskytovanou službou App Service (s příponou "azurewebsites.net").
Na webu Azure Portal vyberte svou službu Application Gateway.
V části Back-endové fondy vyberte back-endový fond.
V části Typ cíle vyberte App Services.
V části Cíl vyberte službu App Service.
Poznámka:
Rozevírací seznam naplní jenom služby App Services, které jsou ve stejném předplatném jako služba Application Gateway. Pokud chcete použít službu App Service, která je v jiném předplatném než v jiném předplatném, než je služba Application Gateway, pak místo výběru služby App Services v rozevíracím seznamu Cíle zvolte IP adresu nebo název hostitele a zadejte název hostitele (example.azurewebsites.net) služby App Service.
Zvolte Uložit.
# 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
Vyžaduje se nastavení HTTP, které službě Application Gateway dává pokyn, aby přistupovala k back-endu služby App Service pomocí vlastního názvu domény. Nastavení HTTP ve výchozím nastavení použije výchozí sondu stavu. I když výchozí sondy stavu budou předávat požadavky s názvem hostitele, ve kterém se provoz přijímá, budou sondy stavu využívat jako název hostitele back-endového fondu 127.0.0.1, protože nebyly explicitně definovány žádné názvy hostitelů. Z tohoto důvodu potřebujeme vytvořit vlastní sondu stavu, která je nakonfigurovaná se správným názvem vlastní domény jako názvem hostitele.
Připojíme se k back-endu pomocí protokolu HTTPS.
V části Nastavení HTTP vyberte existující nastavení HTTP nebo přidejte nové.
Při vytváření nového nastavení HTTP ho pojmenujte.
Jako požadovaný back-endový protokol vyberte HTTPS pomocí portu 443.
Ujistěte se, že jste nastavili možnost Přepsat novým názvem hostitele na Ne.
V rozevíracím seznamu vyberte vlastní sondu stavu HTTPS pro vlastní sondu.
Vyžaduje se nastavení HTTP, které dává službě Application Gateway pokyn, aby přistupovala k back-endu služby App Service pomocí výchozího názvu domény ("azurewebsites.net"). Uděláte to tak, že nastavení HTTP explicitně přepíše název hostitele.
V části Nastavení HTTP vyberte existující nastavení HTTP nebo přidejte nové.
Při vytváření nového nastavení HTTP ho pojmenujte.
Jako požadovaný back-endový protokol vyberte HTTPS pomocí portu 443.
Nezapomeňte nastavit možnost Přepsat novým názvem hostitele na Ano.
V části Přepsání názvu hostitele vyberte "Vybrat název hostitele z back-endového cíle". Toto nastavení způsobí, že požadavek na službu App Service použije název hostitele "azurewebsites.net", jak je nakonfigurovaný v back-endovém fondu.
# 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
Konfigurace naslouchacího procesu HTTP
Abychom mohli přijímat provoz, musíme nakonfigurovat naslouchací proces. Další informace o této konfiguraci najdete v tématu Konfigurace naslouchacího procesu služby Application Gateway.
Otevřete část Naslouchací procesy a zvolte Přidat naslouchací proces nebo klikněte na existující naslouchací proces, který chcete upravit.
Pro nový naslouchací proces: pojmenujte ho
V části Front-endová IP adresa vyberte IP adresu, na které chcete naslouchat.
V části Port vyberte 443.
V části Protokol vyberte HTTPS.
V části Zvolit certifikát vyberte Zvolit certifikát ze služby Key Vault. Další informace najdete v tématu Použití služby Key Vault , kde najdete další informace o tom, jak přiřadit spravovanou identitu a poskytnout jí práva ke službě Key Vault.
Zadejte název certifikátu.
Výběr spravované identity
Vyberte službu Key Vault, ze které se má certifikát získat.
Výběr certifikátu
V části Typ naslouchacího procesu vyberte Základní.
Kliknutím na Přidat přidáte naslouchací proces.
Za předpokladu, že není k dispozici žádná vlastní doména nebo přidružený certifikát, nakonfigurujeme službu Application Gateway tak, aby naslouchala provozu HTTP na portu 80. Další informace najdete v pokynech k vytvoření certifikátu podepsaného svým držitelem.
Otevřete část Naslouchací procesy a zvolte Přidat naslouchací proces nebo klikněte na existující naslouchací proces, který chcete upravit.
Pro nový naslouchací proces: pojmenujte ho
V části Front-endová IP adresa vyberte IP adresu, na které chcete naslouchat.
V části Port vyberte 80.
V části Protokol vyberte 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
V mnoha případech už veřejný naslouchací proces pro HTTP na portu 80 existuje. Následující skript vytvoří takový skript, pokud tomu tak ještě není.
$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
}
Konfigurace pravidla směrování požadavků
Pomocí dříve nakonfigurovaného back-endového fondu a nastavení HTTP je možné nastavit pravidlo směrování požadavků tak, aby přebít provoz z naslouchacího procesu a směroval ho do back-endového fondu pomocí nastavení HTTP. Ujistěte se, že máte k dispozici naslouchací proces HTTP nebo HTTPS, který ještě není svázán s existujícím pravidlem směrování.
Otevřete část Stav back-endu a ujistěte se, že sloupec Stav označuje kombinaci nastavení HTTP a back-endového fondu jako V pořádku.
Teď přejděte k webové aplikaci pomocí IP adresy služby Application Gateway nebo přidruženého názvu DNS pro IP adresu. Obě položky najdete na stránce Přehled služby Application Gateway jako vlastnost v části Základy. Prostředek veřejné IP adresy také zobrazuje IP adresu a přidružený název DNS.
Při testování aplikace věnujte pozornost následujícímu neúplného seznamu potenciálních příznaků:
přesměrování odkazující na ".azurewebsites.net" přímo místo na Službu Application Gateway
to zahrnuje přesměrování ověřování, které vyzkouší přímý přístup k souboru .azurewebsites.net.
soubory cookie vázané na doménu se nepředávají do back-endu
to zahrnuje použití nastavení Spřažení ARR ve službě App Service.
Výše uvedené podmínky (podrobněji vysvětlené v Centru architektury) by značily, že vaše webová aplikace se s přepisem názvu hostitele dobře nezabývá. To se běžně používá. Doporučeným způsobem, jak to vyřešit, je postupovat podle pokynů pro konfiguraci služby Application Gateway se službou App Service pomocí vlastní domény. Viz také: Řešení potíží se službou App Service ve službě Application Gateway.
Otevřete část Stav back-endu a ujistěte se, že sloupec Stav označuje kombinaci nastavení HTTP a back-endového fondu jako V pořádku.
Teď přejděte k webové aplikaci pomocí vlastní domény, kterou jste přidružili ke službě Application Gateway i app Service v back-endu.
Zkontrolujte, jestli se stav back-endu pro back-end a nastavení HTTP zobrazuje jako "V pořádku":
$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
K otestování konfigurace požádáme o obsah ze služby App Service prostřednictvím služby Application Gateway pomocí vlastní domény:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Zkontrolujte, jestli se stav back-endu pro back-end a nastavení HTTP zobrazuje jako "V pořádku":
$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
K otestování konfigurace požádáme o obsah ze služby App Service prostřednictvím služby Application Gateway pomocí IP adresy:
$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)"
Při testování aplikace věnujte pozornost následujícímu neúplného seznamu potenciálních příznaků:
přesměrování odkazující na ".azurewebsites.net" přímo místo na Službu Application Gateway
to zahrnuje přesměrování ověřování služby App Service, které vyzkouší přímý přístup k .azurewebsites.net.
soubory cookie vázané na doménu se nepředávají do back-endu
to zahrnuje použití nastavení Spřažení ARR ve službě App Service.
Výše uvedené podmínky (podrobněji vysvětlené v Centru architektury) by značily, že vaše webová aplikace se s přepisem názvu hostitele dobře nezabývá. To se běžně používá. Doporučeným způsobem, jak to vyřešit, je postupovat podle pokynů pro konfiguraci služby Application Gateway se službou App Service pomocí vlastní domény. Viz také: Řešení potíží se službou App Service ve službě Application Gateway.
Omezení přístupu
Webové aplikace nasazené v těchto příkladech používají veřejné IP adresy, ke kterým je možné přistupovat přímo z internetu. To vám pomůže při řešení potíží, když se seznámíte s novou funkcí a zkoušíte nové věci. Pokud ale chcete nasadit funkci do produkčního prostředí, budete chtít přidat další omezení. Zvažte následující možnosti:
Použijte omezení statické IP adresy služby Aplikace Azure. Webovou aplikaci můžete například omezit tak, aby přijímala pouze provoz ze služby Application Gateway. Pomocí funkce omezení IP adres služby App Service vypíšete virtuální IP adresu služby Application Gateway jako jedinou adresu s přístupem.