Felsöka fel med felaktig gateway (502) i Azure Application Gateway

Sammanfattning

Lär dig hur du felsöker fel med felaktig gateway (502) i Azure Application Gateway så att du snabbt kan återställa tillförlitlig åtkomst till dina webbappar.

Anmärkning

Vi rekommenderar att du använder modulen Azure Az PowerShell för att interagera med Azure. Kom igång genom att läsa Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i Migrera Azure PowerShell från AzureRM till Az.

Symptoms

När du har konfigurerat en programgateway kan du se felet Serverfel: 502 – Webbservern fick ett ogiltigt svar när den fungerade som en gateway eller proxyserver. Det kan bero på följande:

Problem med nätverkssäkerhetsgrupp, användardefinierad väg eller anpassad DNS

Orsak

Om en NSG, UDR eller anpassad DNS blockerar åtkomsten till serverdelen kan programgatewayinstanser inte nå serverdelspoolen. Det här problemet orsakar sondfel, vilket resulterar i fel 502.

NSG/UDR kan finnas antingen i undernätet för programgatewayen eller i undernätet där de virtuella programdatorerna distribueras.

På samma sätt kan förekomsten av en anpassad DNS i det virtuella nätverket också orsaka problem. Ett FQDN som används för medlemmar i serverdelspoolen kanske inte löses korrekt av den användarkonfigurerade DNS-servern för VNet.

Lösning

Verifiera NSG-, UDR- och DNS-konfiguration genom att gå igenom följande steg:

  1. Kontrollera NSG:er som är associerade med application gateway-undernätet. Kontrollera att kommunikationen till serverdelen inte är blockerad. Mer information finns i Nätverkssäkerhetsgrupper.

  2. Kontrollera UDR som är associerad med undernätet för programgatewayen. Kontrollera att UDR inte dirigerar trafik bort från serverdelsundernätet. Du kan till exempel söka efter routning till virtuella nätverksinstallationer eller standardvägar som annonseras till programgatewayens undernät via ExpressRoute/VPN.

    $vnet = Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName
    Get-AzVirtualNetworkSubnetConfig -Name appGwSubnet -VirtualNetwork $vnet
    
  3. Kontrollera den effektiva NSG:n och routa med den virtuella backend-VM:n.

    Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName nic1 -ResourceGroupName testrg
    Get-AzEffectiveRouteTable -NetworkInterfaceName nic1 -ResourceGroupName testrg
    
  4. Kontrollera förekomsten av anpassad DNS i det virtuella nätverket. Kontrollera DNS genom att titta på information om VNet-egenskaperna i utdata.

    Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName 
    DhcpOptions            : {
                               "DnsServers": [
                                 "x.x.x.x"
                               ]
                             }
    
  5. Om det finns ska du säkerställa att DNS-servern kan lösa backend-poolmedlemmens FQDN korrekt.

Standardhälsoavsökningen kan inte nå backend-VM:ar

Orsak

502-fel kan också indikera att standardhälsoavsökningen inte kan nå virtuella serverdelsdatorer.

När du etablerar en programgatewayinstans konfigureras automatiskt en standardhälsoavsökning för varje BackendAddressPool med hjälp av egenskaperna för BackendHttpSetting. Du behöver inte ange några indata för att ställa in den här prob. När du konfigurerar en belastningsutjämningsregel associerar du en BackendHttpSetting med en BackendAddressPool. Var och en av dessa associationer har en standardprobe konfigurerad, och applikationsgatewayen startar en regelbunden hälsokontrollanslutning till varje instans i BackendAddressPool vid den port som anges i elementet BackendHttpSetting.

I följande tabell visas de värden som är associerade med standardhälsoavsökningen:

Probegenskap Värde Description
Avsöknings-URL http://127.0.0.1/ URL-sökväg
Intervall 30 Probningsintervall i sekunder
Tidsgräns 30 Timeout för prob i sekunder
Ohälsosamt tröskelvärde 3 Antal återförsök av avsökning. Backendsservern markeras som ur funktion efter att antalet på varandra följande probefel når tröskelvärdet för ohälsosamt tillstånd.

Lösning

  • Värdvärdet för begäran är inställt på 127.0.0.1. Kontrollera att en standardwebbplats är konfigurerad och lyssnar på 127.0.0.1.
  • Protokollet BackendHttpSetting avgör protokollet för begäran.
  • URI-sökvägen är inställd på /*.
  • Om BackendHttpSetting anger en annan port än 80 konfigurerar du standardplatsen för att lyssna på den porten.
  • Anropet till protocol://127.0.0.1:port ska returnera en HTTP-resultatkod på 200. Den här koden ska returneras inom tidsgränsen på 30 sekunder.
  • Kontrollera att den konfigurerade porten är öppen och att det inte finns några brandväggsregler eller Azure nätverkssäkerhetsgrupper som blockerar inkommande eller utgående trafik på den konfigurerade porten.
  • Om du använder Azure klassiska virtuella datorer eller molntjänst med ett FQDN eller en offentlig IP-adress ska du se till att du öppnar motsvarande endpoint.
  • Om du konfigurerar den virtuella datorn via Azure Resource Manager och den ligger utanför det virtuella nätverk där programgatewayen distribueras måste du konfigurera en Nätverkssäkerhetsgrupp för att tillåta åtkomst på önskad port.

Mer information finns i Konfiguration av Application Gateway-infrastruktur.

Ogiltig eller felaktig konfiguration av anpassade hälsoavsökningar

Orsak

Anpassade hälsoavsökningar ger dig mer flexibilitet än standardbeteendet för avsökning. När du använder anpassade sonder kan du ange sondintervallet, URL:en, sökvägen som ska testas och hur många misslyckade svar som kan accepteras innan du markerar back-end-poolinstansen som ohälsosam.

I följande tabell beskrivs de ytterligare egenskaper som du kan ange:

Probegenskap Description
Namn Sondens namn. Använd det här namnet om du vill referera till avsökningen i HTTP-inställningarna för serverdelen.
Protokoll Protokoll som används för att skicka sonden. Sonden använder det protokoll som definierats i HTTP-inställningarna för backend.
värd Värdnamn för att skicka avsökningen. Den här egenskapen gäller endast när du konfigurerar flera platser på programgatewayen. Det här värdnamnet skiljer sig från värdnamnet för den virtuella datorn.
Sökväg Den relativa sökvägen för sonden. Den giltiga sökvägen börjar från '/'. Proben skickas till <protocol>://<host>:<port><path>.
Intervall Avsökningsintervall i sekunder. Det här värdet anger tidsintervallet mellan två på varandra följande sonder.
Tidsgräns Tidsgräns för prob i sekunder. Om ett giltigt svar inte tas emot inom den här tidsgränsen markeras avsökningen som misslyckad.
Ohälsosamt tröskelvärde Antal återförsök av avsökning. Backendsservern markeras som ur funktion efter att antalet på varandra följande probefel når tröskelvärdet för ohälsosamt tillstånd.

Lösning

Kontrollera att du har konfigurerat den anpassade hälsokontrollen korrekt, enligt tabellen ovan. Förutom de föregående felsökningsstegen kontrollerar du även följande steg:

  • Se till att du specificerar proben korrekt enligt guiden.
  • Om du konfigurerar applikationsgatewayen för en enda webbplats anger du standardvärdnamnet som 127.0.0.1, om du inte har konfigurerat något annat i den anpassade avsökningen.
  • Kontrollera att ett anrop till http://<host>:<port><path> returnerar en HTTP-resultatkod på 200.
  • Kontrollera att värdena Intervall, Timeout och UnhealthyThreshold ligger inom de godkända intervallen.
  • Om du använder en HTTPS-avsökning kontrollerar du att serverdelsservern inte kräver SNI genom att konfigurera ett återställningscertifikat på själva serverdelsservern.

Tidsgräns för begäran eller anslutningsproblem med användarbegäranden

Orsak

När programgatewayen tar emot en användarbegäran tillämpar den de konfigurerade reglerna på begäran och dirigerar den till en serverdelspoolinstans. Den väntar på ett konfigurerbart tidsintervall för ett svar från serverdelsinstansen. Som standard är det här intervallet 20 sekunder. Om programgatewayen inte får något svar från serverdelsprogrammet i det här intervallet i Application Gateway v1 får användarbegäran ett 502-fel. I Application Gateway v2, om programgatewayen inte får något svar från serverdelsprogrammet i det här intervallet, prövas begäran mot en andra medlem i serverdelspoolen. Om den andra begäran misslyckas får användarbegäran ett 504-fel.

Lösning

Du kan konfigurera den här inställningen via BackendHttpSetting, som du kan använda för olika pooler. Olika serverdelspooler kan ha olika backendHttpSetting-konfigurationer och olika tidsgränsinställningar för begäranden.

    New-AzApplicationGatewayBackendHttpSettings -Name 'Setting01' -Port 80 -Protocol Http -CookieBasedAffinity Enabled -RequestTimeout 60

Application Gateways serverdelspool är inte konfigurerad eller tom

Orsak

Om programgatewayen inte har några virtuella datorer eller någon virtuella dator-skalningsuppsättning konfigurerad i serverdelsadresspoolen, kan den inte dirigera någon kundförfrågan och returnerar ett "bad gateway"-fel.

Lösning

Kontrollera att serverdelsadresspoolen inte är tom. Du kan kontrollera det här villkoret via PowerShell, CLI eller portalen.

Get-AzApplicationGateway -Name "SampleGateway" -ResourceGroupName "ExampleResourceGroup"

Utdata från föregående cmdlet ska innehålla en icke-tom backendadresspool. I följande exempel visas två returnerade pooler som har konfigurerats med ett FQDN eller IP-adresser för backend-VM:erna. Etableringstillståndet för BackendAddressPool måste vara Succeeded.

Text om backendadresspooler

[{
    "BackendAddresses": [{
        "ipAddress": "10.0.0.10",
        "ipAddress": "10.0.0.11"
    }],
    "BackendIpConfigurations": [],
    "ProvisioningState": "Succeeded",
    "Name": "Pool01",
    "Etag": "W/\"00000000-0000-0000-0000-000000000000\"",
    "Id": "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name>/backendAddressPools/pool01"
}, {
    "BackendAddresses": [{
        "Fqdn": "xyx.cloudapp.net",
        "Fqdn": "abc.cloudapp.net"
    }],
    "BackendIpConfigurations": [],
    "ProvisioningState": "Succeeded",
    "Name": "Pool02",
    "Etag": "W/\"00000000-0000-0000-0000-000000000000\"",
    "Id": "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name>/backendAddressPools/pool02"
}]

Felaktiga instanser i BackendAddressPool

Orsak

Om alla instanser av BackendAddressPool är ohälsosamma har applikationsgatewayen ingen backend att dirigera användarförfrågningar till. Det här villkoret kan också inträffa när backend-instanser fungerar korrekt men inte har det nödvändiga programmet distribuerat.

Lösning

Kontrollera att instanserna är felfria och att programmet är korrekt konfigurerat. Kontrollera om serverdelsinstanserna kan svara på en ping från en annan virtuell dator i samma virtuella nätverk. Om du konfigurerar en offentlig slutpunkt kontrollerar du att en webbläsarbegäran till webbprogrammet är användbar.

Det överordnade SSL-certifikatet matchar inte

Orsak

TLS-certifikatet som är installerat på serverdelsservrarna matchar inte värdnamnet som tas emot i värdbegäranshuvudet.

I scenarier där TLS från slutpunkt till slutpunkt är aktiverat, en konfiguration som uppnås genom att redigera lämpliga HTTP-inställningar för serverdelen och där ändra konfigurationen av inställningen "Serverdelsprotokoll" till HTTPS, är det obligatoriskt att se till att DNS-namnet för TLS-certifikatet som är installerat på serverdelsservrarna matchar värdnamnet som kommer till serverdelen i HTTP-värdhuvudbegäran.

Som en påminnelse är effekten av att aktivera alternativet protokollval-HTTPS på 'Inställningar för backend HTTP' istället för HTTP, att den andra delen av kommunikationen som sker mellan exemplaren av Application Gateway och de bakomliggande servrarna krypteras med TLS.

På grund av att Application Gateway som standard skickar samma HTTP-värdhuvud till serverdelen som den tar emot från klienten måste du se till att TLS-certifikatet som är installerat på serverdelsservern utfärdas med ett DNS-namn som matchar värdnamnet som tas emot av serverdelen i HTTP-värdhuvudet. Kom ihåg att om inget annat anges är värdnamnet detsamma som det som togs emot från klienten.

Till exempel:

Anta att du har en Application Gateway för att hantera https-begäranden för domänen www.contoso.com. Du kan ha domänen contoso.com delegerad till en Azure DNS offentlig zon och en DNS-post i den zonen som pekar www.contoso.com till den offentliga IP-adressen för den specifika Application Gateway som ska hantera begäranden.

På den applikationsgatewayen ska du ha en lyssnare för värden www.contoso.com med en regel som har inställningen "Backed HTTP Setting" tvingad att använda HTTPS-protokollet (säkerställa TLS mellan slutpunkterna). Samma regel kunde ha konfigurerat en serverdelspool med två virtuella datorer som kör IIS som webbservrar.

Som vi vet gör aktivering av HTTPS i "HTTP-inställning för serverdelen" för regeln så att den andra delen av kommunikationen som sker mellan Application Gateway-instanserna och servrarna i serverdelen använder TLS.

Om serverdelsservrarna inte har något TLS-certifikat utfärdat för DNS-namnet www.contoso.com eller *.contoso.com misslyckas begäran med serverfel: 502 – Webbservern fick ett ogiltigt svar när den fungerade som en gateway eller proxyserver eftersom det överordnade SSL-certifikatet (certifikatet som är installerat på serverdelsservrarna) inte matchar värdnamnet i värdhuvudet. och därför misslyckas TLS-förhandlingen.

www.contoso.com --> APP GW frontend IP --> Lyssnare med en regel som konfigurerar "Backend HTTP-inställningar" för att använda protokollet HTTPS istället för HTTP --> Backend pool --> Webbserver (måste ha ett TLS-certifikat installerat för www.contoso.com)

Lösning

Det krävs att DNS-namnet för TLS-certifikatet som är installerat på serverdelsservern matchar värdnamnet som konfigurerats i HTTP-serverdelsinställningarna, annars matchar inte den andra delen av kommunikationen från slutpunkt till slutpunkt som sker mellan instanserna av Application Gateway och serverdelen, misslyckas med "Uppströms SSL-certifikat matchar inte" och genererar ett serverfel: 502 – Webbservern fick ett ogiltigt svar när den fungerade som en gateway eller proxyserver