Rozwiązywanie App Service problemów z programem Application GatewayTroubleshoot App Service issues in Application Gateway

Dowiedz się, jak diagnozować i rozwiązywać problemy, które mogą Azure App Service, gdy element jest używany jako cel Azure Application Gateway.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.

OmówienieOverview

W tym artykule dowiesz się, jak rozwiązywać następujące problemy:In this article, you'll learn how to troubleshoot the following issues:

  • Adres URL usługi App Service jest ujmowany w przeglądarce w przypadku przekierowywania.The app service URL is exposed in the browser when there's a redirection.
  • Domena pliku cookie ARRAffinity usługi App Service jest ustawiona na nazwę hosta usługi aplikacji, example.azurewebsites.net, a nie na oryginalnego hosta.The app service ARRAffinity cookie domain is set to the app service host name, example.azurewebsites.net, instead of the original host.

Gdy aplikacja back-end wysyła odpowiedź przekierowania, możesz chcieć przekierować klienta do innego adresu URL niż określony przez aplikację tego typu.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. Można to zrobić, gdy usługa aplikacji jest hostowana za bramą aplikacji i wymaga od klienta przekierowania do ścieżki względnej.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. Przykładem jest przekierowanie z witryny contoso.azurewebsites.net/path1 do contoso.azurewebsites.net/path2.An example is a redirect from contoso.azurewebsites.net/path1 to contoso.azurewebsites.net/path2.

Gdy usługa App Service wysyła odpowiedź przekierowania, używa tej samej nazwy hosta w nagłówku lokalizacji odpowiedzi, co nazwa w żądaniu odbieranej z bramy aplikacji.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. Na przykład klient wysyła żądanie bezpośrednio do usługi contoso.azurewebsites.net/path2 zamiast przechodzić przez bramę aplikacji contoso.com/path2.For example, the client makes the request directly to contoso.azurewebsites.net/path2 instead of going through the application gateway contoso.com/path2. Nie chcesz pomijać bramy aplikacji.You don't want to bypass the application gateway.

Ten problem może wystąpić z następujących głównych powodów:This issue might happen for the following main reasons:

  • W usłudze App Service skonfigurowano przekierowanie.You have redirection configured on your app service. Przekierowywanie może być tak proste, jak dodanie końcowego ukośnika do żądania.Redirection can be as simple as adding a trailing slash to the request.
  • Uwierzytelnianie Azure Active Directory, co powoduje przekierowanie.You have Azure Active Directory authentication, which causes the redirection.

Ponadto w przypadku korzystania z usług App Services za bramą aplikacji nazwa domeny skojarzona z bramą aplikacji (example.com) różni się od nazwy domeny usługi App Service (na przykład example.azurewebsites.net).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). Wartość domeny dla pliku cookie ARRAffinity ustawionego przez usługę App Service zawiera example.azurewebsites.net nazwę domeny, co nie jest pożądane.The domain value for the ARRAffinity cookie set by the app service carries the example.azurewebsites.net domain name, which isn't desirable. Oryginalna nazwa hosta, example.com, powinna być wartością nazwy domeny w pliku cookie.The original host name, example.com, should be the domain name value in the cookie.

Przykładowa konfiguracjaSample configuration

  • Odbiornik HTTP: podstawowy lub wielowiterowyHTTP listener: Basic or multi-site
  • Pula adresów App ServiceBack-end address pool: App Service
  • Ustawienia HTTP: wybierz pozycję Nazwa hosta z włączonego adresu zapleczaHTTP settings: Pick Hostname from Backend Address enabled
  • Sonda: wybierz nazwę hosta z włączonych ustawień PROTOKOŁU HTTPProbe: Pick Hostname from HTTP Settings enabled

PrzyczynaCause

App Service jest usługą wielowątkową, dlatego używa nagłówka hosta w żądaniu do przekierowania żądania do poprawnego punktu końcowego.App Service is a multitenant service, so it uses the host header in the request to route the request to the correct endpoint. Domyślna nazwa domeny usługi App Services, *.azurewebsites.net (na przykład contoso.azurewebsites.net), różni się od nazwy domeny bramy aplikacji (np. contoso.com).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).

Oryginalne żądanie klienta ma nazwę domeny bramy aplikacji, contoso.com jako nazwę hosta.The original request from the client has the application gateway's domain name, contoso.com, as the host name. Należy skonfigurować bramę aplikacji tak, aby zmieniała nazwę hosta w oryginalnym żądaniu na nazwę hosta usługi App Service podczas przekierowania żądania do usługi App Service Back end.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. Użyj przełącznika Wybierz nazwę hosta z adresu zaplecza w konfiguracji ustawień PROTOKOŁU HTTP bramy aplikacji.Use the switch Pick Hostname from Backend Address in the application gateway's HTTP setting configuration. Użyj przełącznika Wybierz nazwę hosta z ustawień HTTP zaplecza w konfiguracji sondy kondycji.Use the switch Pick Hostname from Backend HTTP Settings in the health probe configuration.

Brama aplikacji zmienia nazwę hosta

Gdy usługa App Service przekierowuje, używa zastąpionej nazwy hosta contoso.azurewebsites.net w nagłówku lokalizacji zamiast oryginalnej nazwy hosta contoso.com, chyba że skonfigurowano inaczej.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. Sprawdź następujące przykładowe nagłówki żądań i odpowiedzi.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

W poprzednim przykładzie zwróć uwagę, że nagłówek odpowiedzi ma kod stanu 301 dla przekierowania.In the previous example, notice that the response header has a status code of 301 for redirection. Nagłówek lokalizacji zawiera nazwę hosta usługi App Service, a nie oryginalną nazwę hosta www.contoso.com .The location header has the app service's host name instead of the original host name www.contoso.com.

Rozwiązanie: Ponowne przepisanie nagłówka lokalizacjiSolution: Rewrite the location header

Ustaw nazwę hosta w nagłówku lokalizacji na nazwę domeny bramy aplikacji.Set the host name in the location header to the application gateway's domain name. Aby to zrobić, utwórz regułę ponownego pisalicą warunek, który ocenia, czy nagłówek lokalizacji w odpowiedzi zawiera azurewebsites.net.To do this, create a rewrite rule with a condition that evaluates if the location header in the response contains azurewebsites.net. Musi również wykonać akcję, aby ponownie napisać nagłówek lokalizacji, aby miał nazwę hosta bramy aplikacji.It must also perform an action to rewrite the location header to have the application gateway's host name. Aby uzyskać więcej informacji, zobacz instrukcje dotyczące ponownego pisano nagłówek lokalizacji.For more information, see instructions on how to rewrite the location header.

Uwaga

Obsługa ponownego pisali nagłówka HTTP jest dostępna tylko dla Standard_v2 i WAF_v2 SKU Application Gateway.The HTTP header rewrite support is only available for the Standard_v2 and WAF_v2 SKU of Application Gateway. Zalecamy migrowanie do wersji 2 dla opcji Ponowne zapisuje nagłówek i innych zaawansowanych funkcji dostępnych w wersji 2 dla wersji SKU.We recommend migrating to v2 for Header Rewrite and other advanced capabilities that are available with v2 SKU.

Rozwiązanie alternatywne: użyj niestandardowej nazwy domenyAlternate solution: Use a custom domain name

Użycie App Service funkcji Custom Domain to inne rozwiązanie, które zawsze przekierowuje ruch do Application Gateway domeny (w www.contoso.com naszym przykładzie).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). Ta konfiguracja służy również jako rozwiązanie problemu z plikiem cookie koligacji ARR.This configuration also serves as a solution for the ARR Affinity cookie problem. Domyślnie domena plików cookie ARRAffinity jest ustawiona na domyślną nazwę hosta App Service (example.azurewebsites.net) zamiast nazwę domeny Application Gateway użytkownika.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. W związku z tym przeglądarka w takich przypadkach odrzuci plik cookie ze względu na różnicę nazw domen żądania i pliku cookie.Therefore, the browser in such cases will reject the cookie due to the difference in the domain names of the request and the cookie.

Możesz postępować zgodnie z podaną metodą w przypadku problemów z niezgodnością domeny przekierowania i pliku cookie aRRAffinity.You can follow the given method for both the Redirection and ARRAffinity's cookie domain mismatch issues. Ta metoda wymaga dostępu do strefy DNS domeny niestandardowej.This method will need you to have your custom domain's DNS zone access.

Krok 1. Ustaw Custom Domain w App Service i sprawdź własność domeny, dodając rekord CNAME& TXT DNS .Step1: Set a Custom Domain in App Service and verify the domain ownership by adding the CNAME & TXT DNS records. Rekordy będą wyglądać podobnie do:The records would look similar to

  • www.contoso.com IN CNAME contoso.azurewebsite.netwww.contoso.com IN CNAME contoso.azurewebsite.net
  • asuid.www.contoso.com W TXT " <verification id string> "asuid.www.contoso.com IN TXT "<verification id string>"

Krok 2. Rekord CNAME w poprzednim kroku był potrzebny tylko do weryfikacji domeny.Step2: The CNAME record in the previous step was only needed for the domain verification. Ostatecznie potrzebujemy ruchu do przekierowywu przez Application Gateway.Ultimately, we need the traffic to route via Application Gateway. W ten sposób można teraz zmodyfikować rekord CNAME rekordu , aby www.contoso.com Application Gateway nazwę FQDN użytkownika.You can thus modify www.contoso.com's CNAME now to point to Application Gateway's FQDN. Aby ustawić nazwę FQDN dla Application Gateway, przejdź do jego zasobu publicznego adresu IP i przypisz do niego "etykietę nazwy DNS".To set a FQDN for your Application Gateway, navigate to its Public IP address resource and assign a "DNS Name label" for it. Zaktualizowany rekord CNAME powinien teraz wyglądać jakoThe updated CNAME record should now look as

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

Krok 3. Wyłącz opcję "Wybierz nazwę hosta z adresu zaplecza" dla skojarzonego ustawienia HTTP.Step3: Disable "Pick Hostname from Backend Address" for the associated HTTP Setting.

W programie PowerShell nie używaj -PickHostNameFromBackendAddress przełącznika w Set-AzApplicationGatewayBackendHttpSettings poleceniu .In PowerShell, don't use the -PickHostNameFromBackendAddress switch in the Set-AzApplicationGatewayBackendHttpSettings command.

Krok 4. Aby sondy określały zaplecza jako w dobrej kondycji i ruch operacyjny, ustaw niestandardową sondę kondycji z polem Host jako domenę niestandardową lub domyślną App Service.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.

W programie PowerShell nie używaj przełącznika w poleceniu i używaj domeny niestandardowej lub domyślnej App Service w -PickHostNameFromBackendHttpSettings Set-AzApplicationGatewayProbeConfig przełączniku -HostName sondy.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.

Aby zaimplementować poprzednie kroki przy użyciu programu PowerShell dla istniejącej konfiguracji, użyj poniższego przykładowego skryptu programu PowerShell.To implement the previous steps using PowerShell for an existing setup, use the sample PowerShell script that follows. Zwróć uwagę, że przełączniki -PickHostname nie zostały użyte w konfiguracji ustawień sondy i protokołu HTTP.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

Następne krokiNext steps

Jeśli powyższe kroki nie rozwiązały problemu, otwórz bilet pomocy technicznej.If the preceding steps didn't resolve the issue, open a support ticket.