Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Saiba como solucionar erros de gateway incorreto (502) recebidos ao usar o Gateway de Aplicativo do Azure.
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Descrição geral
Depois de configurar um gateway de aplicativo, um dos erros que você pode ver é Erro de servidor: 502 - O servidor Web recebeu uma resposta inválida enquanto atuava como um gateway ou servidor proxy. Este erro pode acontecer pelas seguintes razões principais:
- NSG, UDR ou DNS personalizado está bloqueando o acesso aos membros do pool de back-end.
- As VMs de back-end ou instâncias do conjunto de dimensionamento de máquina virtual não estão respondendo à investigação de integridade padrão.
- Configuração inválida ou incorreta das pesquisas do estado de funcionamento personalizadas.
- O pool de back-end do Azure Application Gateway não está configurado ou vazio.
- Nenhuma das VMs ou instâncias no conjunto de dimensionamento de máquina virtual está íntegra.
- Tempo limite do pedido excedido ou problemas de conectividade com os pedidos do utilizador.
Grupo de Segurança de Rede, Rota Definida pelo Usuário ou Problema de DNS Personalizado
Causa
Se o acesso ao back-end estiver bloqueado devido a um NSG, UDR ou DNS personalizado, as instâncias do gateway de aplicativo não poderão acessar o pool de back-end. Esse problema causa falhas de teste, resultando em 502 erros.
O NSG/UDR pode estar presente na sub-rede do gateway de aplicativo ou na sub-rede onde as VMs do aplicativo são implantadas.
Da mesma forma, a presença de um DNS personalizado na VNet também pode causar problemas. Um FQDN usado para membros do pool de back-end pode não ser resolvido corretamente pelo servidor DNS configurado pelo usuário para a rede virtual.
Solução
Valide a configuração de NSG, UDR e DNS seguindo as seguintes etapas:
Verifique os NSGs associados à sub-rede do gateway de aplicativo. Certifique-se de que a comunicação com o back-end não esteja bloqueada. Para obter mais informações, consulte Grupos de segurança de rede.
Verifique UDR associado à sub-rede do gateway de aplicativo. Certifique-se de que o UDR não está direcionando o tráfego para fora da sub-rede de back-end. Por exemplo, verifique se há roteamento para dispositivos virtuais de rede ou rotas padrão que estão sendo anunciadas para a sub-rede do gateway de aplicativo via ExpressRoute/VPN.
$vnet = Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName Get-AzVirtualNetworkSubnetConfig -Name appGwSubnet -VirtualNetwork $vnetVerifique o NSG efetivo e roteie com a VM de back-end
Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName nic1 -ResourceGroupName testrg Get-AzEffectiveRouteTable -NetworkInterfaceName nic1 -ResourceGroupName testrgVerifique a presença de DNS personalizado na rede virtual. O DNS pode ser verificado observando os detalhes das propriedades da VNet na saída.
Get-AzVirtualNetwork -Name vnetName -ResourceGroupName rgName DhcpOptions : { "DnsServers": [ "x.x.x.x" ] }Se estiver presente, verifique se o servidor DNS pode resolver corretamente o FQDN do membro do pool de back-ends.
Problemas com a sonda de integridade padrão
Causa
Os erros 502 também podem ser indicadores frequentes de que o teste de integridade padrão não pode alcançar VMs de back-end.
Quando uma instância de gateway de aplicativo é provisionada, ela configura automaticamente uma investigação de integridade padrão para cada BackendAddressPool usando propriedades de BackendHttpSetting. Nenhuma entrada do usuário é necessária para definir essa sonda. Especificamente, quando uma regra de balanceamento de carga é configurada, uma associação é feita entre um BackendHttpSetting e um BackendAddressPool. Um teste padrão é configurado para cada uma dessas associações e o gateway de aplicativo inicia uma conexão periódica de verificação de integridade para cada instância no BackendAddressPool na porta especificada no elemento BackendHttpSetting.
A tabela a seguir lista os valores associados à sonda de integridade padrão:
| Propriedade da sonda | valor | Descrição |
|---|---|---|
| URL da sonda | http://127.0.0.1/ |
Caminho do URL |
| Intervalo | 30 | Intervalo da sonda em segundos |
| Limite de Tempo Excedido | 30 | Tempo limite da sonda em segundos |
| Limiar com funcionamento incorreto | 3 | Contagem de novas tentativas da sonda. O servidor back-end é marcado para baixo depois que a contagem de falhas de teste consecutivas atinge o limite não íntegro. |
Solução
- O valor de host da solicitação é definido como 127.0.0.1. Verifique se um site padrão está configurado e escutando em 127.0.0.1.
- O protocolo da solicitação é determinado pelo protocolo BackendHttpSetting.
- O caminho do URI está definido como /.
- Se BackendHttpSetting especificar uma porta diferente de 80, o site padrão deverá ser configurado para escutar nessa porta.
- A chamada para
protocol://127.0.0.1:portdeve retornar um código de resultado HTTP de 200. Esse código deve ser retornado dentro do período de tempo limite de 30 segundos. - Verifique se a porta configurada está aberta e se não há regras de firewall ou Grupos de Segurança de Rede do Azure bloqueando o tráfego de entrada ou de saída na porta configurada.
- Se as VMs clássicas do Azure ou o Serviço de Nuvem forem usados com um FQDN ou um IP público, verifique se o ponto de extremidade correspondente está aberto.
- Se a VM estiver configurada por meio do Gerenciador de Recursos do Azure e estiver fora da VNet onde o gateway de aplicativo é implantado, um Grupo de Segurança de Rede deverá ser configurado para permitir o acesso na porta desejada.
Para obter mais informações, consulte Configuração da infraestrutura do Application Gateway.
Problemas com a sonda de integridade personalizada
Causa
As sondas de integridade personalizadas permitem flexibilidade adicional ao comportamento de sondagem padrão. Ao usar testes personalizados, você pode configurar o intervalo de teste, a URL, o caminho para testar e quantas respostas com falha aceitar antes de marcar a instância do pool de back-end como não íntegra.
As seguintes propriedades adicionais são adicionadas:
| Propriedade da sonda | Descrição |
|---|---|
| Nome | Nome da sonda. Esse nome é usado para se referir à sonda nas configurações HTTP de back-end. |
| Protocolo | Protocolo usado para enviar a sonda. O teste usa o protocolo definido nas configurações HTTP de back-end |
| Anfitrião | Nome do host para enviar a sonda. Aplicável somente quando o multissite está configurado no gateway de aplicativo. Isso é diferente do nome do host da VM. |
| Caminho | Caminho relativo da sonda. O caminho válido começa em '/'. O teste é enviado para <protocol>://<host>:<port><path> |
| Intervalo | Intervalo da sonda em segundos. Este é o intervalo de tempo entre duas sondas consecutivas. |
| Limite de Tempo Excedido | Tempo limite da sonda em segundos. Se uma resposta válida não for recebida dentro desse período de tempo limite, a sonda será marcada como falha. |
| Limiar com funcionamento incorreto | Contagem de novas tentativas da sonda. O servidor back-end é marcado para baixo depois que a contagem de falhas de teste consecutivas atinge o limite não íntegro. |
Solução
Valide se a Sonda de Integridade Personalizada está configurada corretamente, conforme mostrado na tabela anterior. Além das etapas de solução de problemas anteriores, verifique também o seguinte:
- Certifique-se de que a sonda está especificada corretamente de acordo com o guia.
- Se o gateway de aplicativo estiver configurado para um único site, por padrão, o nome do host deverá ser especificado como
127.0.0.1, a menos que configurado de outra forma na sonda personalizada. - Certifique-se de que uma chamada para o caminho< http://> host<:><port>retorne um código de resultado HTTP de 200.
- Verifique se Interval, Timeout e UnhealthyThreshold estão dentro dos intervalos aceitáveis.
- Se estiver usando uma sonda HTTPS, certifique-se de que o servidor back-end não exija SNI configurando um certificado de fallback no próprio servidor back-end.
Tempo limite do pedido
Causa
Quando recebe um pedido do utilizador, o gateway de aplicação aplica as regras configuradas ao pedido e encaminha-o para uma instância de conjunto de back-end. Este aguarda um intervalo de tempo configurável para obter uma resposta da instância de back-end. Por padrão, esse intervalo é de 20 segundos. No Gateway de Aplicação v1, se o gateway de aplicação não receber uma resposta da aplicação de back-end neste intervalo, o pedido do utilizador receberá um erro 502. No Application Gateway v2, se o gateway de aplicativo não receber uma resposta do aplicativo back-end nesse intervalo, a solicitação será tentada contra um segundo membro do pool de back-end. Se o segundo pedido falhar, o pedido do utilizador recebe um erro 504.
Solução
O Gateway de Aplicação permite-lhe configurar esta definição através do BackendHttpSetting, que pode depois ser aplicado a diferentes quantidades. Diferentes quantidades de back-end podem ter diferentes BackendHttpSetting, e um tempo limite de pedido diferente configurado.
New-AzApplicationGatewayBackendHttpSettings -Name 'Setting01' -Port 80 -Protocol Http -CookieBasedAffinity Enabled -RequestTimeout 60
BackendAddressPool vazio
Causa
Se o gateway de aplicativo não tiver VMs ou conjunto de escala de máquina virtual configurado no pool de endereços de back-end, ele não poderá rotear nenhuma solicitação do cliente e enviará um erro de gateway incorreto.
Solução
Verifique se o pool de endereços de back-end não está vazio. Isso pode ser feito via PowerShell, CLI ou portal.
Get-AzApplicationGateway -Name "SampleGateway" -ResourceGroupName "ExampleResourceGroup"
A saída do cmdlet anterior deve conter pool de endereços de back-end não vazio. O exemplo a seguir mostra dois pools retornados que são configurados com um FQDN ou um endereço IP para as VMs de back-end. O estado de provisionamento do BackendAddressPool deve ser 'Succeeded'.
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"
}]
Instâncias não íntegras em BackendAddressPool
Causa
Se todas as instâncias de BackendAddressPool não estiverem íntegras, o gateway de aplicativo não terá nenhum back-end para encaminhar a solicitação do usuário. Isso também pode ser o caso quando as instâncias de back-end estão íntegras, mas não têm o aplicativo necessário implantado.
Solução
Verifique se as instâncias estão íntegras e se o aplicativo está configurado corretamente. Verifique se as instâncias de back-end podem responder a um ping de outra VM na mesma VNet. Se configurado com um ponto de extremidade público, verifique se uma solicitação do navegador para o aplicativo Web é útil.
O certificado SSL upstream não corresponde
Causa
O certificado TLS instalado em servidores back-end não corresponde ao nome de host recebido no cabeçalho da solicitação de host.
Em cenários onde o TLS de ponta a ponta está habilitado, uma configuração que é obtida editando as "Configurações HTTP de back-end" apropriadas e alterando a configuração da configuração "Protocolo de back-end" para HTTPS, é obrigatório garantir que o NOME DNS do certificado TLS instalado nos servidores de back-end corresponda ao nome do host que vem para o back-end na solicitação de cabeçalho de host HTTP.
Como lembrete, o efeito de habilitar nas "Configurações HTTP de back-end" a opção de protocolo HTTPS em vez de HTTP, é que a segunda parte da comunicação que acontece entre as instâncias do Application Gateway e os servidores de back-end são criptografadas com TLS.
Devido ao fato de que, por padrão, o Application Gateway envia o mesmo cabeçalho de host HTTP para o back-end que recebe do cliente, você precisa garantir que o certificado TLS instalado no servidor de back-end seja emitido com um DNS NAME que corresponda ao nome do host recebido por esse servidor de back-end no cabeçalho de host HTTP. Lembre-se de que, a menos que especificado de outra forma, esse nome de host seria o mesmo que o recebido do cliente.
Por exemplo:
Imagine que você tem um Application Gateway para atender às solicitações https de domínio www.contoso.com. Você pode ter o domínio contoso.com delegado a uma Zona Pública de DNS do Azure e um registro DNS A nessa zona apontando www.contoso.com para o IP público do Gateway de Aplicações específico que irá processar as solicitações.
Nesse Application Gateway, você deve ter um ouvinte para o host www.contoso.com com uma regra que tenha a "Configuração HTTP com backup" forçada a usar o protocolo HTTPS (garantindo TLS de ponta a ponta). Essa mesma regra poderia ter configurado um pool de back-end com duas VMs executando o IIS como servidores Web.
Como sabemos, habilitar HTTPS na "Configuração HTTP com backup" da regra faz com que a segunda parte da comunicação que acontece entre as instâncias do Application Gateway e os servidores no back-end use TLS.
Se os servidores back-end não tiverem um certificado TLS emitido para o DNS NAME www.contoso.com ou *.contoso.com, a solicitação falhará com Erro do servidor: 502 - O servidor Web recebeu uma resposta inválida ao agir como um gateway ou servidor proxy porque o certificado SSL upstream (o certificado instalado nos servidores back-end) não corresponde ao nome do host no cabeçalho do host, e, portanto, a negociação TLS falha.
www.contoso.com --> APP GW front-end IP --> Ouvinte com uma regra que configura "Configurações HTTP de back-end" para usar protocolo HTTPS em vez de HTTP --> Pool de back-end --> Servidor Web (precisa ter um certificado TLS instalado para www.contoso.com)
Solução
É necessário que o nome DNS do certificado TLS instalado no servidor back-end corresponda ao nome do anfitrião configurado nas configurações de back-end HTTP, caso contrário, a segunda parte da comunicação de ponta a ponta que ocorre entre as instâncias do Application Gateway e o back-end, falha com "O certificado SSL a montante não coincide" e resulta num Erro de Servidor: 502 - O servidor web recebeu uma resposta inválida ao agir como um gateway ou servidor proxy
Próximos passos
Se as etapas anteriores não resolverem o problema, abra um tíquete de suporte.