Řešení chyb Chybná brána ve službě Application Gateway

Zjistěte, jak řešit chyby Chybná brána (502) při použití Azure Application Gateway.

Poznámka

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Přehled

Po konfiguraci aplikační brány se může zobrazit jedna z chyb Chyba serveru: 502 – Webový server obdržel neplatnou odpověď, když funguje jako brána nebo proxy server. K této chybě může dojít z následujících hlavních důvodů:

Problém se skupinou zabezpečení sítě, uživatelem definovanou trasou nebo vlastním DNS

Příčina

Pokud je přístup k back-endu zablokovaný z důvodu skupiny zabezpečení sítě, trasy definované uživatelem nebo vlastního DNS, instance služby Application Gateway se nemůžou připojit k back-endovému fondu. Tento problém způsobuje selhání sondy, což vede k chybám 502.

Skupina zabezpečení sítě nebo trasa definovaná uživatelem se může nacházet buď v podsíti služby Application Gateway, nebo v podsíti, ve které jsou nasazené virtuální počítače aplikace.

Podobně může být příčinou problémů také přítomnost vlastního DNS ve virtuální síti. Plně kvalifikovaný název domény používaný pro členy back-endového fondu nemusí správně přeložit server DNS nakonfigurovaný uživatelem pro virtuální síť.

Řešení

Projděte si následující kroky a ověřte konfiguraci skupiny zabezpečení sítě, trasy definované uživatelem a DNS:

  1. Zkontrolujte skupiny zabezpečení sítě přidružené k podsíti služby Application Gateway. Ujistěte se, že není zablokovaná komunikace s back-endem. Další informace najdete v tématu Skupiny zabezpečení sítě.

  2. Zkontrolujte trasu definovanou uživatelem přidruženou k podsíti služby Application Gateway. Ujistěte se, že trasa definovaná uživatelem nesměruje provoz pryč z back-endové podsítě. Zkontrolujte například směrování do síťových virtuálních zařízení nebo výchozí trasy inzerované do podsítě služby Application Gateway přes ExpressRoute nebo VPN.

    $vnet = Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName
    Get-AzVirtualNetworkSubnetConfig -Name appGwSubnet -VirtualNetwork $vnet
    
  3. Kontrola efektivní skupiny zabezpečení sítě a trasy s back-endovým virtuálním počítačem

    Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName nic1 -ResourceGroupName testrg
    Get-AzEffectiveRouteTable -NetworkInterfaceName nic1 -ResourceGroupName testrg
    
  4. Zkontrolujte přítomnost vlastního DNS ve virtuální síti. DNS je možné zkontrolovat tak, že se podíváte na podrobnosti o vlastnostech virtuální sítě ve výstupu.

    Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName 
    DhcpOptions            : {
                               "DnsServers": [
                                 "x.x.x.x"
                               ]
                             }
    
  5. Pokud je k dispozici, ujistěte se, že server DNS dokáže správně přeložit plně kvalifikovaný název domény člena back-endového fondu.

Problémy s výchozí sondou stavu

Příčina

Chyby 502 můžou být také častým indikátorem toho, že se výchozí sonda stavu nemůže spojit s virtuálními počítači back-endu.

Když je instance aplikační brány zřízená, automaticky nakonfiguruje výchozí sondu stavu pro každý back-endový fond adres pomocí vlastností BackendHttpSetting. K nastavení této sondy se nevyžaduje žádný uživatelský vstup. Konkrétně se při konfiguraci pravidla vyrovnávání zatížení vytvoří přidružení mezi BackendHttpSetting a BackendAddressPool. Pro každé z těchto přidružení je nakonfigurovaná výchozí sonda a služba Application Gateway spustí pravidelnou kontrolu stavu připojení ke každé instanci v BackendAddressPool na portu zadaném v elementu BackendHttpSetting.

Následující tabulka uvádí hodnoty přidružené k výchozí sondě stavu:

Vlastnost sondy Hodnota Popis
Adresa URL testu http://127.0.0.1/ Cesta URL
Interval 30 Interval testu v sekundách
Časový limit 30 Časový limit sondy v sekundách
Prahová hodnota pro poškozený stav 3 Počet opakování sondy. Back-endový server se označí poté, co počet po sobě jdoucích selhání testů dosáhne prahové hodnoty, která není v pořádku.

Řešení

  • Hodnota hostitele požadavku se nastaví na 127.0.0.1. Ujistěte se, že je nakonfigurovaná výchozí lokalita, která naslouchá na adrese 127.0.0.1.
  • Protokol požadavku je určen protokolem BackendHttpSetting.
  • Cesta URI se nastaví na /.
  • Pokud BackendHttpSetting určuje jiný port než 80, měla by být výchozí lokalita nakonfigurovaná tak, aby naslouchala na tomto portu.
  • Volání protocol://127.0.0.1:port metody by mělo vrátit kód výsledku HTTP 200. Tento kód by se měl vrátit během 30sekundového časového limitu.
  • Ujistěte se, že je nakonfigurovaný port otevřený a neblokují příchozí nebo odchozí provoz na nakonfigurovaných portech žádná pravidla brány firewall ani skupiny zabezpečení sítě Azure.
  • Pokud se klasické virtuální počítače Azure nebo cloudová služba používají s plně kvalifikovaným názvem domény nebo veřejnou IP adresou, ujistěte se, že je otevřený odpovídající koncový bod .
  • Pokud je virtuální počítač nakonfigurovaný přes Azure Resource Manager a nachází se mimo virtuální síť, ve které je nasazená aplikační brána, musí být skupina zabezpečení sítě nakonfigurovaná tak, aby umožňovala přístup na požadovaném portu.

Další informace najdete v tématu konfigurace infrastruktury Application Gateway.

Problémy s vlastní sondou stavu

Příčina

Vlastní sondy stavu umožňují větší flexibilitu výchozího testovacího chování. Při použití vlastních testů můžete nakonfigurovat interval sondy, adresu URL, cestu k testování a počet neúspěšných odpovědí, které se mají přijmout, než označíte instanci back-endového fondu jako instanci back-endového fondu, která není v pořádku.

Přidají se následující další vlastnosti:

Vlastnost sondy Popis
Název Název sondy. Tento název se používá k odkaz na sondu v nastavení HTTP back-endu.
Protokol Protokol použitý k odeslání sondy. Sonda používá protokol definovaný v nastavení HTTP back-endu.
Hostitel Název hostitele pro odeslání testu. Platí jenom v případě, že je ve službě Application Gateway nakonfigurované více webů. To se liší od názvu hostitele virtuálního počítače.
Cesta Relativní cesta sondy Platná cesta začíná od /. Sonda se odešle na <adresu protocol>://<host>:<port><path.>
Interval Interval testu v sekundách. Toto je časový interval mezi dvěma po sobě jdoucími sondami.
Časový limit Časový limit sondy v sekundách. Pokud se během tohoto časového limitu neobdrží platná odpověď, sonda se označí jako neúspěšná.
Prahová hodnota pro poškozený stav Počet opakování sondy. Back-endový server se označí poté, co počet po sobě jdoucích neúspěšných testů dosáhne prahové hodnoty, která není v pořádku.

Řešení

Ověřte, že je vlastní sonda stavu správně nakonfigurovaná, jak je znázorněno v předchozí tabulce. Kromě předchozích kroků pro řešení potíží se také ujistěte, že:

  • Ujistěte se, že je sonda správně zadána podle průvodce.
  • Pokud je služba Application Gateway nakonfigurovaná pro jednu lokalitu, měl by být název hostitele ve výchozím nastavení zadaný jako 127.0.0.1, pokud není ve vlastní sondě nakonfigurovaný jinak.
  • Ujistěte se, že volání cesty> http://< host>:<port><vrátí kód výsledku HTTP 200.
  • Ujistěte se, že Interval, Časový limit a UnhealtyThreshold jsou v přijatelných rozsahech.
  • Pokud používáte sondu HTTPS, ujistěte se, že back-endový server nevyžaduje SNI tím, že nakonfigurujete záložní certifikát na samotném back-endovém serveru.

Časový limit požadavku

Příčina

Při přijetí požadavku uživatele aplikační brána na požadavek použije nakonfigurovaná pravidla a přesměruje ho do instance back-endového fondu. Po nakonfigurovatelný časový interval počká na odpověď z back-endové instance. Ve výchozím nastavení je tento interval 20 sekund. Ve službě Application Gateway v1 platí, že pokud aplikační brána během tohoto intervalu neobdrží odpověď z back-endové aplikace, na požadavek uživatele se vrátí chyba 502. Pokud služba Application Gateway v Application Gateway v2 neobdrží odpověď z back-endové aplikace v tomto intervalu, požadavek se pokusí provést proti druhému členovi back-endového fondu. Pokud druhý požadavek selže, zobrazí se uživateli chyba 504.

Řešení

Application Gateway umožňuje nakonfigurovat toto nastavení prostřednictvím BackendHttpSetting, které se pak dá použít pro různé fondy. Různé back-endové fondy můžou mít jiný BackendHttpSetting a nakonfigurovat jiný časový limit požadavku.

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

Prázdný back-endový fond adres

Příčina

Pokud služba Application Gateway nemá v back-endovém fondu adres nakonfigurované žádné virtuální počítače ani škálovací sadu virtuálních počítačů, nemůže směrovat žádné požadavky zákazníka a odešle chybu chybné brány.

Řešení

Ujistěte se, že back-endový fond adres není prázdný. Můžete to provést prostřednictvím PowerShellu, rozhraní příkazového řádku nebo portálu.

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

Výstup z předchozí rutiny by měl obsahovat neempty back-endový fond adres. Následující příklad ukazuje dva vrácené fondy, které jsou nakonfigurované pomocí plně kvalifikovaného názvu domény nebo IP adres pro back-endové virtuální počítače. Stav zřizování fondu BackendAddressPool musí být "Úspěch".

BackendAddressPoolsText:

[{
    "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"
}]

Instance, které nejsou v pořádku, ve fondu back-endových adres

Příčina

Pokud všechny instance BackendAddressPool nejsou v pořádku, služba Application Gateway nemá žádný back-end, na který by bylo potřeba směrovat požadavky uživatelů. To může být také případ, kdy jsou instance back-endu v pořádku, ale nemají nasazenou požadovanou aplikaci.

Řešení

Ujistěte se, že jsou instance v pořádku a že je aplikace správně nakonfigurovaná. Zkontrolujte, jestli back-endové instance můžou reagovat na příkaz ping z jiného virtuálního počítače ve stejné virtuální síti. Pokud je nakonfigurovaný veřejný koncový bod, ujistěte se, že požadavek prohlížeče na webovou aplikaci je obsluhovatelný.

Nadřazený certifikát SSL se neshoduje

Příčina

Certifikát TLS nainstalovaný na back-endových serverech neodpovídá názvu hostitele přijatému v hlavičce žádosti hostitele.

Ve scénářích, kdy je povolený protokol TLS typu End-to-end, konfigurace, které se dosáhne úpravou příslušného nastavení HTTP back-endu a změnou konfigurace nastavení back-endového protokolu na HTTPS, je povinné zajistit, aby CNAME certifikátu TLS nainstalovaného na back-endových serverech odpovídal názvu hostitele přicházejícímu do back-endu v požadavku hlavičky hostitele HTTP.

Připomínáme, že povolení možnosti protokolu HTTPS na back-endovém nastavení HTTP bude mít za následek, že druhá část komunikace mezi instancemi Application Gateway a back-endovými servery bude šifrovaná pomocí protokolu TLS.

Vzhledem k tomu, že ve výchozím nastavení Application Gateway odesílá do back-endu stejnou hlavičku hostitele HTTP, jakou přijímá od klienta, budete muset zajistit, aby byl certifikát TLS nainstalovaný na back-endovém serveru vystaven s CNAME, který odpovídá názvu hostitele přijatému daným back-endovým serverem v hlavičce hostitele HTTP. Mějte na paměti, že pokud není uvedeno jinak, bude tento název hostitele stejný jako název přijatý od klienta.

Příklad:

Představte si, že máte Application Gateway pro zpracování požadavků https pro www.contoso.com domény. Můžete mít doménu contoso.com delegovanou do veřejné zóny Azure DNS a záznam DNS A v této zóně odkazující www.contoso.com na veřejnou IP adresu konkrétního Application Gateway, který bude poskytovat požadavky.

V této Application Gateway byste měli mít naslouchací proces pro hostitele www.contoso.com s pravidlem, které má "Zálohované nastavení HTTP" vynucené k použití protokolu HTTPS (zajištění end-to-end TLS). Stejné pravidlo mohlo nakonfigurovat back-endový fond se dvěma virtuálními počítači, na kterých běží služba IIS jako webové servery.

Jak víme, povolení PROTOKOLU HTTPS v zálohované nastavení HTTP pravidla způsobí, že druhá část komunikace mezi Application Gateway instancemi a servery v back-endu bude používat protokol TLS.

Pokud back-endové servery nemají certifikát TLS vystavený pro www.contoso.com CNAME nebo *.contoso.com, požadavek selže s chybou serveru: 502 – Webový server obdržel neplatnou odpověď, když funguje jako brána nebo proxy server , protože nadřazený certifikát SSL (certifikát nainstalovaný na back-endových serverech) nebude odpovídat názvu hostitele v hlavičce hostitele. a proto vyjednávání protokolu TLS selže.

www.contoso.com – IP adresa front-endu> APP GW –> Naslouchací proces s pravidlem, které konfiguruje "Nastavení HTTP back-endu" tak, aby používal protokol HTTPS místo HTTP – Back-endový> fond –> webový server (musí mít nainstalovaný certifikát TLS pro www.contoso.com)

Řešení

CNAME certifikátu TLS nainstalovaného na back-endovém serveru se musí shodovat s názvem hostitele nakonfigurovaným v nastavení back-endu HTTP, jinak druhá část kompletní komunikace, která probíhá mezi instancemi Application Gateway a back-endem, selže s tím, že se nadřazený certifikát SSL neshoduje a vyvolá zpět Chyba serveru: 502 – Webový server obdržel neplatnou odpověď, když funguje jako brána nebo proxy server.

Další kroky

Pokud předchozí kroky problém nevyřeší, otevřete lístek podpory.