502 Bad Gateway

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

O aplicativo cliente recebe um código de status HTTP 502 com a mensagem "Bad Gateway" como resposta para chamadas de API.

O código de status HTTP 502 significa que o cliente não está recebendo uma resposta válida dos servidores de back-end que deveriam atender à solicitação.

Mensagens de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 502 Bad Gateway

Além disso, você pode observar as seguintes mensagens de erro:

<html>
<head>
<title>Error</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>

Se o erro vier do servidor de back-end, você poderá ver algo assim. A mensagem de erro do back-end depende totalmente da implementação.

<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

Causas possíveis

Confira algumas possíveis causas que podem levar ao erro de gateway incorreto 502 para APIs que passam pelo Apigee Edge:

Causa Descrição Instruções de solução de problemas aplicáveis a
Nenhum MP disponível no pool Esse erro é observado se todos os MPs no pool estiverem indisponíveis, ou seja, inativos ou ocupados e, portanto, não respondendo. Usuários da nuvem privada do Edge
Configuração SSL incorreta entre roteadores e MPs Esse erro é observado se o certificado raiz assinado pela CA do cliente estiver ausente no truststore do roteador do Edge. Usuários da nuvem privada do Edge
Erro do servidor de back-end Esse erro será observado se o servidor de back-end falhar e enviar essa resposta. Usuários da nuvem pública e privada do Edge

Causa: nenhum MP disponível no pool

Esse erro ocorrerá se o roteador descobrir que todos os processadores de mensagens em uma determinada região/data center estão indisponíveis (por exemplo, se estiverem inativos).

O Apigee Edge é configurado de forma que o tráfego de API (solicitações) recebido em uma determinada região/data center seja sempre encaminhado dos roteadores para os processadores de mensagens (MPs) na mesma região/data center. Em alguns casos, os componentes do Apigee Edge podem ser configurados em apenas uma região/data center e, em alguns casos, em mais de uma região/data center. Em cada região/data center, haverá dois ou mais roteadores e processadores de mensagens configurados.

Diagnóstico

  1. Determine as regiões/data centers em que as solicitações de API estão falhando com o erro de gateway incorreto 502, se houver mais de uma região/data center. Para isso, identifique a região em que os usuários estão observando erros 502 ou verifique os registros de acesso do NGINX no diretório /opt/apigee/var/log/edge-router/nginx/ em cada um dos roteadores pertencentes a diferentes regiões.
  2. O seguinte erro será exibido nos registros de erros do NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)
    2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"

Situação 1: todos os processadores de mensagens estão inativos

  1. Verifique se os processadores de mensagens na região/data center específica estão ativos e em execução.
  2. Se todos os processadores de mensagens estiverem inativos, reinicie-os.

Resolução

Reinicie todos os processadores de mensagens usando o comando a seguir:

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Situação 2: todos os processadores de mensagens estão ocupados processando solicitações em andamento

Esse erro ocorrerá se os roteadores descobrirem que todos os processadores de mensagens em uma determinada região/data center estão indisponíveis porque estão ocupados processando solicitações em andamento.

  1. Verifique se os processadores de mensagens na região/data center específica estão ativos e em execução.
  2. Se todos os processadores de mensagens estiverem ativos, verifique se eles estão com uso alto da CPU e gere três despejos de linhas de execução a cada 30 segundos usando o comando a seguir:
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
  3. Se os processadores de mensagens estiverem com uso alto de memória, gere um despejo de heap usando o comando a seguir:
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
  4. Reinicie o processador de mensagens usando o comando abaixo. Ele deve reduzir a CPU e a memória:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. Monitore as chamadas de API para confirmar se o problema ainda existe.
  6. Entre em contato com o suporte do Apigee e forneça os despejos de linhas de execução, o despejo de heap e os registros do processador de mensagens (/opt/apigee/var/log/edge-message-processor/logs/system.log) para ajudar a investigar a causa do uso alto de CPU/memória.

Causa: configuração SSL incorreta entre roteadores e MPs

Diagnóstico

  1. Verifique os registros de acesso do NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log). Você verá a resposta 502, conforme mostrado abaixo:
        2019-07-23T12:13:42+03:00	sc-10-254-226-23	10.X.X.X:53634	10.X.X.X:8998	0.000	-	-	502	502	189	344	GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2	<host alias>	mp-10-254-226-23-23706-8552529-1	10.129.107.101	-	-	-1	-	-	dc-2	gateway-2	green	-	gateway-2	dc-2	op	pilot	http	-
  2. Verifique os registros de erros do NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log). Você verá erros como este:
    	2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
  3. Isso mostra que o handshake de SSL falha entre o roteador e o processador de mensagens.
  4. Se você observar com atenção a mensagem de erro nas etapas 1 e 2, a porta usada para se comunicar com o processador de mensagens é 8998, que é uma porta não segura, mas o protocolo é SSL (https). Normalmente, a porta segura usada é 8443. Como uma porta não segura é usada para comunicação segura, isso causa a falha no handshake de SSL.
  5. Normalmente, isso pode acontecer se você perdeu alguma etapa ou definiu valores incorretos ao configurar o SSL entre o roteador e o processador de mensagens. Consulte as etapas descritas aqui.
    Por exemplo, esse erro pode ocorrer se
    1. O número da porta for especificado como 8998 em vez de 8443 em /opt/apigee/customer/application/message-processor.properties as shown below
              conf/message-processor-communication.properties+local.http.port=8998
    2. Os arquivos de configuração do roteador no diretório /opt/nginx/conf.d/* não forem excluídos e o roteador não tiver sido reiniciado ao fazer a configuração SSL. Nesse cenário, você pode notar que o número da porta dos processadores de mensagens permanecerá 8998 nos arquivos de configuração.

Resolução

  1. Confira se todas as etapas fornecidas em Como configurar o TLS entre um roteador e um processador de mensagens foram seguidas corretamente.
  2. Se o problema persistir, acesse Coletar informações de diagnóstico.

Causa: erro do servidor de back-end

Diagnóstico

  1. Se o erro ocorrer sempre, capture o rastreamento da interface para as solicitações com falha. Selecione uma solicitação com falha e navegue por várias fases no rastreamento. Se você receber o "gateway incorreto 502" do próprio servidor de back-end, o problema poderá ser causado por alguma falha no servidor de back-end.
    Rastreamento mostrando o gateway incorreto 502 vindo do servidor de back-end
  2. Se o problema for intermitente e você não conseguir capturar o rastreamento,
    1. Se você for um usuário da nuvem pública, use o monitoramento de API e verifique os detalhes sobre os erros 502.
      1. Se o código de falha for messaging.adaptors.http.flow.ErrorResponseCode e a origem da falha for target, o erro será causado pelo servidor de back-end.
    2. Se você for um usuário da nuvem privada, analise os registros de acesso do NGINX
      /opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
      A entrada da solicitação com falha será exibida da seguinte maneira:
      2017-02-24T14:42:12+00:00	rt-01	192.8.155.2:18118	192.168.84.166:8998	10.225	-	-	502	502	440	0	GET /adv-eadlg-test/documents?type=doctype HTTP/1.1	rt-02efawae234-1234	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36	myorg-dev.apigee.net	 rt-02efawae234-1234	6	-	false	target	messaging.adaptors.http.flow.ErrorResponseCode	null/null	-	/organizations/myorg/environments/dev/apiproxies/api123
      1. Se o código de falha for messaging.adaptors.http.flow.ErrorResponseCode e a origem da falha for target, o erro será causado pelo servidor de back-end.

Resolução

  1. Trabalhe com a equipe do servidor de back-end para corrigir esse problema no back-end.

Coletar informações de diagnóstico

  1. Registros de acesso do NGINX
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)
    e registros de erros
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log).
  2. Registros do processador de mensagens
    (/opt/apigee/var/log/edge-message-processor/logs/system.log).