Application Gateway App Service sorunlarını gidermeTroubleshoot App Service issues in Application Gateway

Azure App Service Azure Application Gateway ile arka uç hedefi olarak kullanıldığında karşılaşabileceğiniz sorunları tanılamanıza ve çözmeyi öğrenin.Learn how to diagnose and resolve issues you might encounter when Azure App Service is used as a back-end target with Azure Application Gateway.

Genel BakışOverview

Bu makalede, aşağıdaki sorunları nasıl giderebileceğinizi öğreneceksiniz:In this article, you'll learn how to troubleshoot the following issues:

  • Uygulama Hizmeti URL 'SI, yeniden yönlendirme olduğunda tarayıcıda gösterilir.The app service URL is exposed in the browser when there's a redirection.
  • App Service ARRAffinity tanımlama bilgisi etki alanı, özgün ana bilgisayar yerine App Service ana bilgisayar adı, example.azurewebsites.net olarak ayarlanır.The app service ARRAffinity cookie domain is set to the app service host name, example.azurewebsites.net, instead of the original host.

Bir arka uç uygulaması yeniden yönlendirme yanıtı gönderdiğinde, istemciyi arka uç uygulaması tarafından belirtilene göre farklı bir URL 'ye yönlendirmek isteyebilirsiniz.When a back-end application sends a redirection response, you might want to redirect the client to a different URL than the one specified by the back-end application. Bir uygulama hizmeti bir uygulama ağ geçidinin arkasında barındırılıyorsa ve istemcinin göreli yoluna yeniden yönlendirme yapması için bunu yapmak isteyebilirsiniz.You might want to do this when an app service is hosted behind an application gateway and requires the client to do a redirection to its relative path. Örnek, contoso.azurewebsites.net/path1 ile contoso.azurewebsites.net/path2 arasında bir yönlendirme örneğidir.An example is a redirect from contoso.azurewebsites.net/path1 to contoso.azurewebsites.net/path2.

App Service bir yeniden yönlendirme yanıtı gönderdiğinde, uygulamanın konum üst bilgisinde uygulama ağ geçidinden aldığı istek gibi aynı ana bilgisayar adını kullanır.When the app service sends a redirection response, it uses the same host name in the location header of its response as the one in the request it receives from the application gateway. Örneğin, istemci, Application Gateway contoso.com/path2 'e geçmek yerine isteği doğrudan contoso.azurewebsites.net/path2 'e yapar.For example, the client makes the request directly to contoso.azurewebsites.net/path2 instead of going through the application gateway contoso.com/path2. Application Gateway 'i atlamak istemezsiniz.You don't want to bypass the application gateway.

Bu sorun aşağıdaki başlıca nedenlerden kaynaklanabilir:This issue might happen for the following main reasons:

  • App Service 'te yeniden yönlendirme yapılandırdınız.You have redirection configured on your app service. Yeniden yönlendirme, isteğe bir sondaki eğik çizgi eklemek kadar basit olabilir.Redirection can be as simple as adding a trailing slash to the request.
  • Azure Active Directory kimlik doğrulamasından sahipsiniz, bu da yeniden yönlendirmeye neden olur.You have Azure Active Directory authentication, which causes the redirection.

Ayrıca, uygulama hizmetlerini bir uygulama ağ geçidinin arkasında kullandığınızda, uygulama ağ geçidi (example.com) ile ilişkili etki alanı adı App Service 'in etki alanı adından (deyin, example.azurewebsites.net) farklıdır.Also, when you use app services behind an application gateway, the domain name associated with the application gateway (example.com) is different from the domain name of the app service (say, example.azurewebsites.net). App Service tarafından ayarlanan ARRAffinity tanımlama bilgisinin etki alanı değeri, istenen olmayan example.azurewebsites.net etki alanı adını taşır.The domain value for the ARRAffinity cookie set by the app service carries the example.azurewebsites.net domain name, which isn't desirable. Özgün ana bilgisayar adı, example.com, tanımlama bilgisinde etki alanı adı değeri olmalıdır.The original host name, example.com, should be the domain name value in the cookie.

Örnek yapılandırmaSample configuration

  • HTTP dinleyicisi: temel veya çok siteliHTTP listener: Basic or multi-site
  • Arka uç adres havuzu: App ServiceBack-end address pool: App Service
  • HTTP ayarları: arka uç adresinden ana bilgisayar adı seçin etkinHTTP settings: Pick Hostname from Backend Address enabled
  • Araştırma: http ayarlarından ana bilgisayar adı seçinProbe: Pick Hostname from HTTP Settings enabled

NedeniCause

App Service, çok kiracılı bir hizmettir, bu nedenle isteği doğru uç noktaya yönlendirmek için istekte ana bilgisayar üst bilgisini kullanır.App Service is a multitenant service, so it uses the host header in the request to route the request to the correct endpoint. App Services, *. azurewebsites.net (deyin, contoso.azurewebsites.net) varsayılan etki alanı adı, Application Gateway 'in etki alanı adından (deyin, contoso.com) farklıdır.The default domain name of App Services, *.azurewebsites.net (say, contoso.azurewebsites.net), is different from the application gateway's domain name (say, contoso.com).

İstemciden gelen özgün istek, ana bilgisayar adı olarak contoso.com, Application Gateway 'in etki alanı adına sahiptir.The original request from the client has the application gateway's domain name, contoso.com, as the host name. Uygulama ağ geçidini, isteği App Service arka ucuna yönlendirdikleri zaman App Service 'in ana bilgisayar adına değiştirmek üzere yapılandırmanız gerekir.You need to configure the application gateway to change the host name in the original request to the app service's host name when it routes the request to the app service back end. Application Gateway 'in HTTP ayar yapılandırmasındaki arka uç adresinden anahtar seçim ana bilgisayar adını kullanın.Use the switch Pick Hostname from Backend Address in the application gateway's HTTP setting configuration. Durum araştırma yapılandırmasındaki arka uç http ayarlarından anahtar seçim ana bilgisayar adını kullanın.Use the switch Pick Hostname from Backend HTTP Settings in the health probe configuration.

Uygulama ağ geçidi değişiklikleri konak adı

App Service bir yeniden yönlendirme yaparken, aksi belirtilmedikçe, contoso.com orijinal ana bilgisayar adı yerine konum üstbilgisinde geçersiz kılınan ana bilgisayar adı contoso.azurewebsites.net kullanır.When the app service does a redirection, it uses the overridden host name contoso.azurewebsites.net in the location header instead of the original host name contoso.com, unless configured otherwise. Aşağıdaki örnek istek ve yanıt üst bilgilerini denetleyin.Check the following example request and response headers.

## Request headers to Application Gateway:

Request URL: http://www.contoso.com/path

Request Method: GET

Host: www.contoso.com

## Response headers:

Status Code: 301 Moved Permanently

Location: http://contoso.azurewebsites.net/path/

Server: Microsoft-IIS/10.0

Set-Cookie: ARRAffinity=b5b1b14066f35b3e4533a1974cacfbbd969bf1960b6518aa2c2e2619700e4010;Path=/;HttpOnly;Domain=contoso.azurewebsites.net

X-Powered-By: ASP.NET

Önceki örnekte, Yanıt üstbilgisinin yeniden yönlendirme için 301 durum koduna sahip olduğuna dikkat edin.In the previous example, notice that the response header has a status code of 301 for redirection. Konum üst bilgisi, özgün ana bilgisayar adı yerine App Service 'in ana bilgisayar adına sahiptir www.contoso.com .The location header has the app service's host name instead of the original host name www.contoso.com.

Çözüm: konum başlığını yeniden yazınSolution: Rewrite the location header

Konum üstbilgisindeki ana bilgisayar adını Application Gateway 'in etki alanı adına ayarlayın.Set the host name in the location header to the application gateway's domain name. Bunu yapmak için, yanıttaki konum üstbilgisinin azurewebsites.net içerdiğini değerlendiren bir koşula sahip bir yeniden yazma kuralı oluşturun.To do this, create a rewrite rule with a condition that evaluates if the location header in the response contains azurewebsites.net. Ayrıca, uygulama ağ geçidinin ana bilgisayar adına sahip olacak şekilde konum başlığını yeniden yazmak için bir eylem gerçekleştirmelidir.It must also perform an action to rewrite the location header to have the application gateway's host name. Daha fazla bilgi için bkz. konum üst bilgisini yeniden yazmayönergeleri.For more information, see instructions on how to rewrite the location header.

Not

HTTP üst bilgisi yeniden yazma desteği yalnızca Application Gateway Standard_v2 ve WAF_v2 SKU 'su için kullanılabilir.The HTTP header rewrite support is only available for the Standard_v2 and WAF_v2 SKU of Application Gateway. V2 SKU 'SU ile kullanılabilir olan üst bilgi yeniden yazma ve diğer Gelişmiş yetenekler için v2 'ye geçiş yapmanızı öneririz.We recommend migrating to v2 for Header Rewrite and other advanced capabilities that are available with v2 SKU.

Alternatif çözüm: özel bir etki alanı adı kullanınAlternate solution: Use a custom domain name

App Service özel etki alanı özelliği kullanmak, trafiği her zaman Application Gateway etki alanı adına (örneğimizde) yeniden yönlendirmeye yönelik başka bir çözümdür www.contoso.com .Using App Service's Custom Domain feature is another solution to always redirect the traffic to Application Gateway's domain name (www.contoso.com in our example). Bu yapılandırma, ARR benzeşim tanımlama bilgisi sorununa yönelik bir çözüm olarak da kullanılır.This configuration also serves as a solution for the ARR Affinity cookie problem. Varsayılan olarak, ARRAffinity tanımlama alanı, Application Gateway etki alanı adı yerine App Service varsayılan ana bilgisayar adına (example.azurewebsites.net) ayarlanır.By default, the ARRAffinity cookie domain is set to the App Service's default host name (example.azurewebsites.net) instead of the Application Gateway's domain name. Bu nedenle, bu gibi durumlarda tarayıcı, isteğin etki alanı adlarındaki ve tanımlama bilgisinin farkı nedeniyle tanımlama bilgisini reddeder.Therefore, the browser in such cases will reject the cookie due to the difference in the domain names of the request and the cookie.

Hem yeniden yönlendirme hem de ARRAffinity öğesinin tanımlama bilgisi etki alanı uyuşmazlığı sorunları için verilen yöntemi izleyebilirsiniz.You can follow the given method for both the Redirection and ARRAffinity's cookie domain mismatch issues. Bu yöntem, özel etki alanının DNS bölgesinin erişimine sahip olmanız gerekir.This method will need you to have your custom domain's DNS zone access.

Adım: App Service içinde özel bir etki alanı ayarlayın ve CNAME & txt DNS kayıtlarınıekleyerek etki alanı sahipliğini doğrulayın.Step1: Set a Custom Domain in App Service and verify the domain ownership by adding the CNAME & TXT DNS records. Kayıtlar şuna benzer görünmelidirThe records would look similar to

  • www.contoso.com CNAME 'DE contoso.azurewebsite.netwww.contoso.com IN CNAME contoso.azurewebsite.net
  • asuid.www.contoso.com TXT " <verification id string> " içindeasuid.www.contoso.com IN TXT "<verification id string>"

Step2: ÖNCEKI adımda CNAME kaydı yalnızca etki alanı doğrulaması için gereklidir.Step2: The CNAME record in the previous step was only needed for the domain verification. Son olarak, Application Gateway aracılığıyla yönlendirmeye yönelik trafiğe ihtiyacımız var.Ultimately, we need the traffic to route via Application Gateway. Bu nedenle, www.contoso.com Application Gateway FQDN 'sini işaret etmek IÇIN CNAME 'i Şimdi değiştirebilirsiniz.You can thus modify www.contoso.com's CNAME now to point to Application Gateway's FQDN. Application Gateway için bir FQDN ayarlamak için, genel IP adresi kaynağına gidin ve bir "DNS ad etiketi" atayın.To set a FQDN for your Application Gateway, navigate to its Public IP address resource and assign a "DNS Name label" for it. Güncelleştirilmiş CNAME kaydı şöyle görünmelidirThe updated CNAME record should now look as

  • www.contoso.com CNAME 'DE contoso.eastus.cloudapp.azure.comwww.contoso.com IN CNAME contoso.eastus.cloudapp.azure.com

Step3: Ilişkili http ayarı Için "arka uç adresinden ana bilgisayar adını seçin" ayarını devre dışı bırakın.Step3: Disable "Pick Hostname from Backend Address" for the associated HTTP Setting.

PowerShell 'de, -PickHostNameFromBackendAddress komutunda anahtarını kullanmayın Set-AzApplicationGatewayBackendHttpSettings .In PowerShell, don't use the -PickHostNameFromBackendAddress switch in the Set-AzApplicationGatewayBackendHttpSettings command.

Step4: arka ucu sağlıklı ve işlemsel trafik olarak belirleme araştırmaları Için, ana bilgisayar alanı ile bir özel durum araştırması App Service özel veya varsayılan etki alanı olarak ayarlayın.Step4: For the probes to determine the backend as healthy and an operational traffic, set a custom Health Probe with Host field as custom or default domain of the App Service.

PowerShell 'de, -PickHostNameFromBackendHttpSettings komutta anahtarını kullanmayın Set-AzApplicationGatewayProbeConfig ve araştırmanın-HostName anahtarındaki App Service özel veya varsayılan etki alanını kullanın.In PowerShell, don't use the -PickHostNameFromBackendHttpSettings switch in the Set-AzApplicationGatewayProbeConfig command and use either the custom or default domain of the App Service in the -HostName switch of the probe.

Mevcut bir kurulum için PowerShell 'i kullanarak önceki adımları uygulamak için aşağıdaki örnek PowerShell betiğini kullanın.To implement the previous steps using PowerShell for an existing setup, use the sample PowerShell script that follows. Araştırma ve HTTP ayarları yapılandırmasındaki -pickhostname anahtarlarını nasıl kullandığımızda aklınızda olduğunu öğrenin.Note how we haven't used the -PickHostname switches in the probe and HTTP settings configuration.

$gw=Get-AzApplicationGateway -Name AppGw1 -ResourceGroupName AppGwRG
Set-AzApplicationGatewayProbeConfig -ApplicationGateway $gw -Name AppServiceProbe -Protocol Http -HostName "example.azurewebsites.net" -Path "/" -Interval 30 -Timeout 30 -UnhealthyThreshold 3
$probe=Get-AzApplicationGatewayProbeConfig -Name AppServiceProbe -ApplicationGateway $gw
Set-AzApplicationGatewayBackendHttpSettings -Name appgwhttpsettings -ApplicationGateway $gw -Port 80 -Protocol Http -CookieBasedAffinity Disabled -Probe $probe -RequestTimeout 30
Set-AzApplicationGateway -ApplicationGateway $gw
## Request headers to Application Gateway:

Request URL: http://www.contoso.com/path

Request Method: GET

Host: www.contoso.com

## Response headers:

Status Code: 301 Moved Permanently

Location: http://www.contoso.com/path/

Server: Microsoft-IIS/10.0

Set-Cookie: ARRAffinity=b5b1b14066f35b3e4533a1974cacfbbd969bf1960b6518aa2c2e2619700e4010;Path=/;HttpOnly;Domain=www.contoso.com

X-Powered-By: ASP.NET

Sonraki adımlarNext steps

Yukarıdaki adımlar sorunu çözmezse, bir destek biletiaçın.If the preceding steps didn't resolve the issue, open a support ticket.