Felsöka App Service problem i Application GatewayTroubleshoot App Service issues in Application Gateway

Lär dig hur du diagnostiserar och löser problem som kan uppstå när Azure App Service används som backend-mål med 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.

ÖversiktOverview

I den här artikeln får du lära dig hur du felsöker följande problem:In this article, you'll learn how to troubleshoot the following issues:

  • App Service-URL: en visas i webbläsaren när det finns en omdirigering.The app service URL is exposed in the browser when there's a redirection.
  • App Service-ARRAffinity cookie-domän har angetts som App Service-värdnamn, example.azurewebsites.net, i stället för den ursprungliga värden.The app service ARRAffinity cookie domain is set to the app service host name, example.azurewebsites.net, instead of the original host.

När ett backend-program skickar ett svar på omdirigering kanske du vill omdirigera klienten till en annan URL än den som anges av Server dels programmet.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. Du kanske vill göra detta när en app service finns bakom en Programgateway och kräver att klienten utför en omdirigering till dess relativa sökväg.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. Ett exempel är en omdirigering från contoso.azurewebsites.net/path1 till contoso.azurewebsites.net/path2.An example is a redirect from contoso.azurewebsites.net/path1 to contoso.azurewebsites.net/path2.

När App Service skickar ett svar för omdirigering använder den samma värdnamn i plats huvudet i svaret som det i den begäran som den tar emot från Application Gateway.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. Klienten gör till exempel begäran direkt till contoso.azurewebsites.net/path2 i stället för att gå igenom Application Gateway-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. Du vill inte kringgå Application Gateway.You don't want to bypass the application gateway.

Det här problemet kan inträffa av följande huvudsakliga orsaker:This issue might happen for the following main reasons:

  • Du har konfigurerat en omdirigering som kon figurer ATS i App Service.You have redirection configured on your app service. Omdirigering kan vara lika enkelt som att lägga till ett avslutande snedstreck i begäran.Redirection can be as simple as adding a trailing slash to the request.
  • Du har Azure Active Directory autentisering, vilket gör omdirigeringen.You have Azure Active Directory authentication, which causes the redirection.

När du använder app Services bakom en Programgateway skiljer sig även det domän namn som är associerat med Application Gateway (example.com) från domän namnet för App Service (t. ex. 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). Domän värdet för den ARRAffinity-cookie som anges av App Service har domän namnet example.azurewebsites.net, vilket inte är önskvärt.The domain value for the ARRAffinity cookie set by the app service carries the example.azurewebsites.net domain name, which isn't desirable. Det ursprungliga värd namnet, example.com, ska vara domän namn svärdet i cookien.The original host name, example.com, should be the domain name value in the cookie.

Exempel på konfigurationSample configuration

  • HTTP-lyssnare: grundläggande eller flera platserHTTP listener: Basic or multi-site
  • Backend-adresspool: App ServiceBack-end address pool: App Service
  • HTTP-inställningar: Välj värdnamn från backend-adressen aktive radHTTP settings: Pick Hostname from Backend Address enabled
  • Avsökning: Välj värdnamn för HTTP-inställningar aktiveratProbe: Pick Hostname from HTTP Settings enabled

OrsakCause

App Service är en tjänst för flera innehavare, så den använder värd huvudet i begäran för att dirigera begäran till rätt slut punkt.App Service is a multitenant service, so it uses the host header in the request to route the request to the correct endpoint. Standard domän namnet för App Services, *. azurewebsites.net (t. ex. contoso.azurewebsites.net) skiljer sig från Application gateways domän namn (t. ex. 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).

Den ursprungliga begäran från klienten har Application gateways domän namn, contoso.com, som värd namn.The original request from the client has the application gateway's domain name, contoso.com, as the host name. Du måste konfigurera programgatewayen för att ändra värd namnet i den ursprungliga begäran till App Service-värdnamnet när den dirigerar begäran till App Service-server delen.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. Använd växeln Välj värd namnet från Server dels adressen i konfigurationen för http-konfigurationen för programgatewayen.Use the switch Pick Hostname from Backend Address in the application gateway's HTTP setting configuration. Använd växeln Välj värd namn från Server delens HTTP-inställningar i hälso avsöknings konfigurationen.Use the switch Pick Hostname from Backend HTTP Settings in the health probe configuration.

Värddator namn för Application Gateway ändras

När App Service utför en omdirigering använder den det åsidosatta värd namnet contoso.azurewebsites.net i plats rubriken i stället för det ursprungliga värd namnet contoso.com, om inget annat har kon figurer ATS.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. Kontrol lera följande exempel på begäran och svarshuvuden.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

I föregående exempel ser du att svars huvudet har status kod 301 för omdirigering.In the previous example, notice that the response header has a status code of 301 for redirection. Plats huvudet har App Service-värdnamnet i stället för det ursprungliga värd namnet www.contoso.com .The location header has the app service's host name instead of the original host name www.contoso.com.

Lösning: Skriv om plats rubrikenSolution: Rewrite the location header

Ange värd namnet i plats rubriken till Application gatewayens domän namn.Set the host name in the location header to the application gateway's domain name. Det gör du genom att skapa en Rewrite-regel med ett villkor som utvärderar om plats rubriken i svaret innehåller azurewebsites.net.To do this, create a rewrite rule with a condition that evaluates if the location header in the response contains azurewebsites.net. Det måste också utföra en åtgärd för att skriva om plats huvudet till Application Gateway-värdnamnet.It must also perform an action to rewrite the location header to have the application gateway's host name. Mer information finns i anvisningar om hur du skriver om plats rubriken.For more information, see instructions on how to rewrite the location header.

Anteckning

Stödet för omskrivning av HTTP-huvud är bara tillgängligt för Standard_v2 och WAF_V2 SKU för Application Gateway.The HTTP header rewrite support is only available for the Standard_v2 and WAF_v2 SKU of Application Gateway. Om du använder v1 SKU rekommenderar vi att du migrerar från v1 till v2.If you use v1 SKU, we recommend that you migrate from v1 to v2. Du vill använda omskrivning och andra avancerade funktioner som är tillgängliga med v2-SKU: n.You want to use rewrite and other advanced capabilities that are available with v2 SKU.

Alternativ lösning: Använd ett anpassat domän namnAlternate solution: Use a custom domain name

Om du använder v1 SKU kan du inte skriva om plats rubriken.If you use v1 SKU, you can't rewrite the location header. Den här funktionen är endast tillgänglig för v2 SKU.This capability is only available for v2 SKU. Lös problemet genom att skicka samma värdnamn som Application Gateway tar emot till App Service, i stället för att utföra en åsidosättning av värden.To resolve the redirection issue, pass the same host name that the application gateway receives to the app service as well, instead of doing a host override.

App Service gör nu omdirigeringen (om det finns en sådan) på samma ursprungliga värd huvud som pekar på programgatewayen och inte dess egen.The app service now does the redirection (if any) on the same original host header that points to the application gateway and not its own.

Du måste äga en anpassad domän och följa den här processen:You must own a custom domain and follow this process:

  • Registrera domänen i den anpassade domän listan för App Service.Register the domain to the custom domain list of the app service. Du måste ha en CNAME-post i din anpassade domän som pekar på App Services FQDN.You must have a CNAME in your custom domain that points to the app service's FQDN. Mer information finns i mappa ett befintligt anpassat DNS-namn till Azure App Service.For more information, see Map an existing custom DNS name to Azure App Service.

    App Service, anpassad domän lista

  • Din app service är redo att acceptera värd namnet www.contoso.com .Your app service is ready to accept the host name www.contoso.com. Ändra CNAME-posten i DNS så att den pekar tillbaka till programgatewayens FQDN, till exempel appgw.eastus.cloudapp.azure.com .Change your CNAME entry in DNS to point it back to the application gateway's FQDN, for example, appgw.eastus.cloudapp.azure.com.

  • Kontrol lera att din domän www.contoso.com matchar programgatewayens FQDN-namn när du gör en DNS-fråga.Make sure that your domain www.contoso.com resolves to the application gateway's FQDN when you do a DNS query.

  • Ange anpassad avsökning för att inaktivera Välj värdnamn från Server delens HTTP-inställningar.Set your custom probe to disable Pick Hostname from Backend HTTP Settings. Avmarkera kryss rutan i avsöknings inställningarna i Azure Portal.In the Azure portal, clear the check box in the probe settings. I PowerShell använder du inte växeln -PickHostNameFromBackendHttpSettings i kommandot set-AzApplicationGatewayProbeConfig .In PowerShell, don't use the -PickHostNameFromBackendHttpSettings switch in the Set-AzApplicationGatewayProbeConfig command. I fältet värdnamn för avsökningen anger du din app service FQDN, example.azurewebsites.net.In the host name field of the probe, enter your app service's FQDN, example.azurewebsites.net. Avsöknings begär Anden som skickas från programgatewayen har detta fullständiga domän namn i värd huvudet.The probe requests sent from the application gateway carry this FQDN in the host header.

    Anteckning

    I nästa steg kontrollerar du att den anpassade avsökningen inte är kopplad till dina Server dels-HTTP-inställningar.For the next step, make sure that your custom probe isn't associated to your back-end HTTP settings. HTTP-inställningarna har fortfarande Välj värd namn från Server dels adress växeln som är aktive rad i det här läget.Your HTTP settings still have the Pick Hostname from Backend Address switch enabled at this point.

  • Ange HTTP-inställningarna för programgatewayen för att inaktivera Välj värdnamn från backend-adressen.Set your application gateway's HTTP settings to disable Pick Hostname from Backend Address. I Azure Portal avmarkerar du kryss rutan.In the Azure portal, clear the check box. I PowerShell använder du inte växeln -PickHostNameFromBackendAddress i kommandot set-AzApplicationGatewayBackendHttpSettings .In PowerShell, don't use the -PickHostNameFromBackendAddress switch in the Set-AzApplicationGatewayBackendHttpSettings command.

  • Associera den anpassade avsökningen tillbaka till Server delens HTTP-inställningar och kontrol lera att Server delen är felfri.Associate the custom probe back to the back-end HTTP settings, and verify that the back end is healthy.

  • Programgatewayen bör nu vidarebefordra samma värdnamn, www.contoso.com till App Service.The application gateway should now forward the same host name, www.contoso.com, to the app service. Omdirigeringen sker på samma värdnamn.The redirection happens on the same host name. Kontrol lera följande exempel på begäran och svarshuvuden.Check the following example request and response headers.

Använd PowerShell-skriptet nedan om du vill implementera föregående steg med PowerShell för en befintlig installation.To implement the previous steps using PowerShell for an existing setup, use the sample PowerShell script that follows. Observera att vi inte har använt växlarna -PickHostname i konfigurationen för avsöknings-och http-inställningar.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

Nästa stegNext steps

Om föregående steg inte löste problemet öppnar du ett support ärende.If the preceding steps didn't resolve the issue, open a support ticket.