Azure Application Gateway, bir App Service uygulamasına veya diğer çok kiracılı hizmete arka uç havuzu üyesi olarak sahip olmanıza olanak tanır. Bu makalede App Service uygulamasını Application Gateway ile yapılandırmayı öğreneceksiniz. Application Gateway yapılandırması, App Service'e nasıl erişilebileceğine bağlı olarak değişir:
- İlk seçenek hem Application Gateway'de hem de arka uçtaki App Service'te özel bir etki alanı kullanır.
- İkinci seçenek, Application Gateway'in App Service'e ".azurewebsite.net" uzantılı varsayılan etki alanını kullanarak erişim sağlamasıdır.
Bu yapılandırma üretim sınıfı senaryolar için önerilir ve istek akışında ana bilgisayar adını değiştirmeme uygulamasını karşılar. Özel bir etki alanı (ve ilişkili sertifika) bulundurmanız gerekir, böylece varsayılan ".Azurewebsite" etki alanına güvenmek zorunda kalmazsınız.
Hem Application Gateway hem de App Service arka uç havuzuna aynı etki alanı adı atandığında, istek akışı konak adını değiştirmek zorunda kalmaz. Arka uç web uygulaması, istemci tarafından kullanılan özgün ana bilgisayarı görür.
Bu yapılandırma en kolayıdır ve özel etki alanı gerektirmez. Bu nedenle hızlı bir kolay kurulum sağlar.
App Service'in kendisiyle ilişkilendirilmiş özel bir etki alanı olmadığında, web uygulamasındaki gelen isteğin ana bilgisayar üst bilgisinin varsayılan etki alanına ayarlanması gerekir ve bu alanın ".azurewebsites.net" ile sonlanması gerekir; aksi takdirde platform isteği doğru şekilde yönlendiremez.
Application Gateway tarafından alınan özgün istekteki barındırıcı üst bilgisi, arka uç Uygulama Hizmeti'nin barındırıcı adından farklıdır.
Bu makalede şunları öğreneceksiniz:
- DNS yapılandırma
- App Service'i Application Gateway'e arka uç havuzu olarak ekleme
- App Service bağlantısı için HTTP Ayarlarını yapılandırma
- HTTP Dinleyicisi yapılandırma
- İstek Yönlendirme Kuralı Yapılandırma
Önkoşullar
DNS'yi yapılandırma
Bu senaryo bağlamında DNS iki yerde geçerlidir:
- Kullanıcının veya istemcinin Application Gateway'e yönlendirmiş olduğu ve tarayıcıda gösterilen DNS adı
- Application Gateway'in arka uçtaki App Service'e erişmek için dahili olarak kullandığı DNS adı
Özel etki alanını kullanarak kullanıcıyı veya istemciyi Application Gateway'e yönlendirin. Application Gateway için DNS'ye yönlendirilmiş bir CNAME takma adı kullanarak DNS'yi yapılandırın. Application Gateway DNS adresi, ilişkili Genel IP adresinin genel bakış sayfasında gösterilir. Alternatif olarak, doğrudan IP adresine işaret eden bir A kaydı oluşturun. (Application Gateway V1 için, hizmeti durdurup başlatırsanız VIP değişebilir ve bu da bu seçeneği istenmeyen hale getirir.)
App Service, gelen ana bilgisayar olarak özel etki alanı adını kullanarak Application Gateway'den gelen trafiği kabul etmesi için yapılandırılmalıdır. Özel bir etki alanını App Service'e eşleme hakkında daha fazla bilgi için bkz Öğretici: Mevcut özel DNS adını Azure App Service'e eşleme Etki alanını doğrulamak için, App Service yalnızca bir TXT kaydı eklenmesini gerektirir. CNAME veya A kayıtlarında değişiklik gerekmez. Özel etki alanının DNS yapılandırması Application Gateway'e yönlendirilmiş durumda kalır.
HTTPS üzerinden App Service bağlantılarını kabul etmek için TLS bağlamasını yapılandırın. tr-TR: Daha fazla bilgi için bkz. Azure App Service'te TLS/SSL bağlaması ile özel bir DNS adının güvenliğini sağlama App Service'i, Azure Key Vault'tan özel etki alanının sertifikasını çekmek üzere yapılandırma.
Özel etki alanı olmadığında, kullanıcı veya istemci ağ geçidinin IP adresini veya DNS adresini kullanarak Application Gateway'e erişebilir. Application Gateway DNS adresi, ilişkili Genel IP adresinin genel bakış sayfasında bulunabilir. Özel etki alanının kullanılabilir olmaması, Application Gateway'de TLS için genel olarak imzalanan bir sertifikanın kullanılamadığını gösterir. İstemciler, otomatik olarak imzalanan bir sertifikayla HTTP veya HTTPS kullanmakla sınırlıdır ve her ikisi de istenmeyen bir sertifikadır.
App Service'e bağlanmak için Application Gateway, App Service tarafından sağlanan varsayılan etki alanını kullanır ("azurewebsites.net" son eklenmiştir).
App service'i arka uç havuzu olarak ekle
Azure portalında Application Gateway'inizi seçin.
Arka uç havuzları'nın altında arka uç havuzunu seçin.
Hedef türü altındaUygulama Hizmetleri'ne tıklayın.
Hedef'in altında App Service'inizi seçin.
Uyarı
Açılan liste yalnızca Application Gateway'inizle aynı abonelikteki uygulama hizmetlerini doldurur. Application Gateway'in bulunduğu abonelikten farklı bir abonelikte olan bir uygulama hizmetini kullanmak istiyorsanız, Hedefler açılan listesinde Uygulama Hizmetleri'ni seçmek yerine IP adresi veya ana bilgisayar adı seçeneğini belirleyin ve uygulama hizmetinin ana bilgisayar adını (example.azurewebsites.net) girin. App Service'inizle özel uç noktaları kullanıyorsanız bunun yerine özel uç noktanın FQDN'sini veya IP adresini kullanmanız gerekir.
Kaydetseçeneğini seçin.
# 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
App Service için HTTP ayarlarını düzenleme
Application Gateway'e özel etki alanı adını kullanarak App Service arka ucuna erişmesini belirten bir HTTP Ayarı gereklidir. HTTP Ayarı, varsayılan olarak varsayılan sağlık taraması kullanır. Varsayılan sistem durumu yoklamaları, trafiğin alındığı konak adıyla istekleri iletse de, sistem durumu yoklamaları açıkça tanımlanmış bir ana bilgisayar adı olmadığından arka uç havuzuna konak adı olarak 127.0.0.1 kullanabilir. Bu nedenle, host adı olarak doğru özel etki alanı adıyla yapılandırılmış bir özel sağlık araştırması oluşturmamız gerekir.
HTTPS kullanarak arka uça bağlanıyoruz.
-
HTTP Ayarları'nın altında var olan bir HTTP ayarını seçin veya yenisini ekleyin.
- Yeni bir HTTP Ayarı oluştururken buna bir ad verin
- 443 numaralı bağlantı noktasını kullanarak istenen arka uç protokolü olarak HTTPS'yi seçin
- Sertifika iyi bilinen bir yetkili tarafından imzalandıysa, "Kullanıcı tarafından iyi bilinen CA sertifikası" için "Evet" seçeneğini belirleyin. Alternatif olarak arka uç sunucularının kimlik doğrulaması/güvenilen kök sertifikalarını ekleme
- "Yeni ana bilgisayar adıyla geçersiz kıl" seçeneğini "Hayır" olarak ayarladığınızdan emin olun
- "Özel yoklama" için açılan listeden özel HTTPS sağlık yoklamasını seçin.
Application Gateway'in varsayılan ("azurewebsites.net") etki alanı adını kullanarak App Service arka ucuna erişmesini sağlamak için bir HTTP Ayarı gereklidir. Bunu yapmak için HTTP Ayarı, konak adını açıkça geçersiz kılar.
-
HTTP Ayarları'nın altında var olan bir HTTP ayarını seçin veya yenisini ekleyin.
- Yeni bir HTTP Ayarı oluştururken buna bir ad verin
- 443 numaralı bağlantı noktasını kullanarak istenen arka uç protokolü olarak HTTPS'yi seçin
- Sertifika iyi bilinen bir yetkili tarafından imzalandıysa, "Kullanıcı tarafından iyi bilinen CA sertifikası" için "Evet" seçeneğini belirleyin. Alternatif olarak arka uç sunucularının kimlik doğrulaması/güvenilen kök sertifikalarını ekleme
- "Yeni ana bilgisayar adıyla geçersiz kıl" seçeneğini "Evet" olarak ayarladığınızdan emin olun
- "Ana Bilgisayar Adı Geçersiz Kılma" ayarında, "Arka Uç Hedefinden Ana Bilgisayar Adı Al" seçeneğini belirleyin. Bu ayar, App Service'e yapılan isteğin "azurewebsites.net" ana bilgisayar adını, Arka Uç Havuzu'nda yapılandırıldığı gibi, kullanmasına neden olur.
# 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
Trafiği kabul etmek için bir Dinleyici yapılandırmamız gerekir. Dinleyici hakkında daha fazla bilgi için bkz. Application Gateway dinleyici yapılandırması.
- "Dinleyiciler" bölümünü açın ve "Dinleyici ekle" seçeneğini belirleyin veya düzenlemek için mevcut bir dinleyiciyi seçin
- Yeni bir dinleyici için: Ona bir ad verin
- "Ön uç IP"nin altında, dinlenecek IP adresini seçin
- "Bağlantı noktası" bölümünde 443'e tıklayın
- "Protokol" altında "HTTPS" öğesini seçin
- "Sertifika seçin" bölümünde "Key Vault'tan bir sertifika seçin" seçeneğini belirleyin. Daha fazla bilgi için bkz. Yönetilen kimlik atama ve Key Vault'unuza hak sağlama hakkında daha fazla bilgi bulabileceğiniz Key Vault'u kullanma.
- Sertifikaya bir ad verin
- Yönetilen Kimlik'i seçin
- Sertifikanın alınacağı Anahtar Kasası'nı seçin
- Sertifikayı seçin
- "Dinleyici Türü" altında "Temel" öğesini seçin
- Dinleyiciyi eklemek için "Ekle" seçeneğini belirleyin
Kullanılabilir özel etki alanı veya ilişkili sertifika olmadığını varsayarak Application Gateway'i 80 numaralı bağlantı noktasındaKI HTTP trafiğini dinleyecek şekilde yapılandırın. Alternatif olarak, otomatik olarak imzalanan sertifika oluşturma yönergelerine bakın
- "Dinleyiciler" bölümünü açın ve "Dinleyici ekle" seçeneğini belirleyin veya düzenlemek için mevcut bir dinleyiciyi seçin
- Yeni bir dinleyici için: Ona bir ad verin
- "Ön uç IP"nin altında, dinlenecek IP adresini seçin
- "Bağlantı noktası" altında 80'i seçin
- "Protokol" altında "HTTP" seçeneğini belirleyin
# 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
Çoğu durumda, bağlantı noktası 80'de HTTP için genel dinleyici bulunur. Aşağıdaki betik, eğer şu anda mevcut değilse, bir tane oluşturur.
$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
}
Daha önce yapılandırılan Arka Uç Havuzu ve HTTP Ayarları, istek yönlendirme kuralı bir dinleyiciden trafik alacak ve HTTP Ayarları kullanılarak Arka Uç Havuzu'na yönlendirilecek şekilde ayarlanabilir. Bunun için, mevcut bir yönlendirme kuralına bağlı olmayan bir HTTP veya HTTPS dinleyiciniz olduğundan emin olun.
- "Kurallar" altında yeni bir "istek yönlendirme kuralı" eklemek için seçin
- Kuralı bir adla belirtin
- Henüz var olan bir yönlendirme kuralına bağlı olmayan bir HTTP veya HTTPS dinleyicisi seçin
- "Arka uç hedefleri" altında App Service'in yapılandırıldığı Arka Uç Havuzunu seçin
- Application Gateway'in App Service arka ucuna bağlanması gereken HTTP ayarlarını yapılandırma
- Bu yapılandırmayı kaydetmek için "Ekle" seçeneğini belirleyin
$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
Test aşaması
Bunu gerçekleştirmeden önce sunucu durumunun sağlıklı olduğundan emin olun.
"Arka uç durumu" bölümünü açın ve "Durum" sütununun HTTP Ayarı ve Arka Uç Havuzu birleşiminin "Sağlıklı" olarak gösterildiğinden emin olun.
Şimdi Application Gateway IP Adresini veya IP Adresi için ilişkili DNS adını kullanarak web uygulamasına göz atın. Her ikisi de Application Gateway "Genel Bakış" sayfasında "Essentials" altında bir özellik olarak bulunabilir. Alternatif olarak, Genel IP Adresi kaynağı ip adresini ve ilişkili DNS adını da gösterir.
Uygulamayı test ederken aşağıdaki olası belirtilerin tükenmez listesine dikkat edin:
- Application Gateway yerine doğrudan ".azurewebsite.net" adresine yönlendirilen yeniden yönlendirmeler
- ".azurewebsite.net" adresine doğrudan erişim sağlamayı deneyen kimlik doğrulama yönlendirmelerini içerir.
- alan adına bağlı çerezler sunucuya iletilmiyor
- App Service'te "ARR benşimi" ayarının kullanımını dahil edin
Yukarıdaki koşullar ( Mimari Merkezi'nde daha ayrıntılı olarak açıklanmıştır) web uygulamanızın ana bilgisayar adını yeniden yazmakla iyi ilgilenmediğini gösterir. Bu yaygın olarak görülür. Bununla başa çıkmanın önerilen yolu, özel bir etki alanı kullanarak App Service ile Application Gateway'i yapılandırma yönergelerini izlemektir. Ayrıca bkz. Application Gateway'de App Service sorunlarını giderme.
"Arka uç durumu" bölümünü açın ve "Durum" sütununun HTTP Ayarı ve Arka Uç Havuzu birleşiminin "Sağlıklı" olarak gösterildiğinden emin olun.
Şimdi hem Application Gateway hem de arka uçtaki App Service ile ilişkilendirdiğiniz özel etki alanını kullanarak web uygulamasına göz atın.
Arka uç ve HTTP Ayarları için arka uç durumunun "Sağlıklı" olarak gösterilip gösterilmediğini denetleyin:
$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
Konfigürasyonu test etmek için, özel alan adını kullanarak Application Gateway üzerinden App Service'ten içerik istiyoruz:
$customDomainName = "<FQDN for custom domain pointing to Application Gateway>"
Invoke-WebRequest $customDomainName
Arka uç ve HTTP Ayarları için arka uç durumunun "Sağlıklı" olarak gösterilip gösterilmediğini denetleyin:
$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
Yapılandırmayı test etmek için APP Service'ten IP adresini kullanarak Application Gateway aracılığıyla içerik istiyoruz:
$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)"
Uygulamayı test ederken aşağıdaki olası belirtilerin tükenmez listesine dikkat edin:
- Application Gateway yerine doğrudan ".azurewebsites.net" öğesini işaret eden yeniden yönlendirmeler
- Bu, doğrudan ".azurewebsites.net" adresine erişmeye çalışan App Service Kimlik Doğrulaması yeniden yönlendirmelerini içerir.
- alan adına bağlı çerezler sunucuya iletilmiyor
- Bu, App Service'te "ARR benşimi" ayarının kullanımını içerir
Yukarıdaki koşullar ( Mimari Merkezi'nde daha ayrıntılı olarak açıklanmıştır) web uygulamanızın ana bilgisayar adını yeniden yazmakla iyi ilgilenmediğini gösterir. Bu yaygın olarak görülür. Bu koşulla başa çıkmanın önerilen yolu, özel bir etki alanı kullanarak App Service ile Application Gateway'i yapılandırma yönergelerini izlemektir. Ayrıca bkz. Application Gateway'de App Service sorunlarını giderme.
Erişimi kısıtla
Bu örneklerde dağıtılan web uygulamaları, doğrudan İnternet'ten erişilebilen genel IP adreslerini kullanır. Bu, yeni bir özellik hakkında bilgi edinirken ve yeni şeyler denerken sorun gidermeye yardımcı olur. Ancak bir özelliği üretim ortamına dağıtmak istiyorsanız daha fazla kısıtlama eklemek istiyorsunuz. Aşağıdaki seçenekleri göz önünde bulundurun: