Você está vendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. informações
Sintoma
O aplicativo cliente recebe o erro 502 Bad Gateway. O processador de mensagens retorna esse erro para o aplicativo cliente quando ele não recebe uma resposta de um servidor de back-end.
Mensagem de erro
O aplicativo cliente recebe este código de resposta:
HTTP/1.1 502 Bad Gateway
Além disso, talvez você veja a seguinte mensagem de erro:
{
"fault": {
"faultstring":"Bad Gateway",
"detail":{
"errorcode":"messaging.adaptors.http.flow.BadGateway"
}
}
}
Possível causa
A possível causa desse problema está listada na tabela a seguir:
Causa | Descrição | As etapas de solução de problemas podem ser realizadas |
Tempo limite de handshake de TLS/SSL | Um tempo limite é atingido durante o handshake de TLS/SSL entre o processador de mensagens e o servidor de back-end. | Usuários de nuvem privada e pública do Edge |
Causa: tempo limite de handshake de TLS/SSL
No Apigee Edge, é possível configurar uma conexão TLS/SSL com o servidor de back-end para ativar a comunicação TLS entre o Edge Message Processor e um servidor de back-end.
Um handshake de TLS/SSL envolve várias etapas. Esse erro geralmente acontece quando o handshake de TLS/SSL entre o processador de mensagens e um servidor de back-end expira.
Diagnóstico
Esta seção explica como diagnosticar corretamente um tempo limite de handshake de TLS/SSL. As instruções para a nuvem privada do Edge e a nuvem pública estão listadas.
Investigar a saída da sessão do Trace
Nas etapas a seguir, explicamos como fazer um diagnóstico preliminar do problema usando a ferramenta Apigee Edge Trace.
- Na interface do Edge, ative uma Sessão de rastreamento para o proxy de API afetado.
Se o trace da solicitação de API com falha mostrar o seguinte, é provável que tenha ocorrido um erro de tempo limite de handshake de TLS/SSL. A causa provável do erro é que o firewall do servidor de back-end está bloqueando o tráfego da Apigee.
- Determine se o erro 502 Bad Gateway ocorre após 55 segundos, que é o tempo limite padrão definido no processador de mensagens. Se você vir que o erro ocorreu após 55 segundos, isso vai informar que um tempo limite foi a causa provável do problema.
- Determine se o erro mostra a falha: messaging.adaptors.http.BadGateway. Novamente, esse erro geralmente indica que ocorreu um tempo limite.
Se você estiver na nuvem privada de borda, anote o valor do campo X-Apigee.Message-ID na saída de rastreamento, conforme mostrado abaixo. Um usuário da nuvem privada pode usar esse valor de ID para resolver outros problemas, conforme explicado posteriormente.
Clique no ícone Dados do Analytics registrados no caminho de trace:
Role para baixo e observe o valor do campo X-Apigee.Message-ID.
Para confirmar se o tempo limite do handshake de TLS/SSL foi a causa do erro, siga as etapas nas seções a seguir, dependendo se você está na nuvem pública ou na nuvem privada.
Etapas de diagnóstico adicionais apenas para usuários da nuvem privada do Edge
Se você estiver na nuvem privada do Apigee Edge, poderá executar as etapas a seguir para verificar a causa do erro de handshake. Nesta etapa, você vai inspecionar o arquivo de registro do processador de mensagens em busca de informações relevantes. Se você estiver na nuvem pública de borda, pule esta seção e acesse Outras etapas de diagnóstico para usuários de nuvem privada e pública.
Verifique se você pode se conectar ao servidor de back-end específico diretamente de cada um dos processadores de mensagens usando o comando
telnet
:Se o servidor de back-end for resolvido para um único endereço IP, use este comando:
telnet BackendServer-IPaddress 443
Se o servidor de back-end resolver para vários endereços IP, use o nome do host do servidor de back-end no comando telnet, como mostrado abaixo:
telnet BackendServer-HostName 443
Se você conseguir se conectar ao servidor de back-end sem erros, prossiga para a próxima etapa.
Se o comando
telnet
falhar, fale com sua equipe de rede para verificar a conectividade entre o processador de mensagens e o servidor de back-end.Verifique o arquivo de registro do processador de mensagens para ver evidências de uma falha de handshake. Abra o arquivo:
/opt/apigee/var/log/edge-message-processor/system.log
e procure o ID da mensagem exclusivo (o valor de X-Apigee.Message-ID encontrado no arquivo de rastreamento). Determine se você recebe uma mensagem de erro de handshake associada ao ID da mensagem, conforme mostrado abaixo:
org:xxx env:xxx api:xxx rev:x messageid:<MESSAGE_ID> NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeTimeout() : SSLClientChannel[Connected: Remote:X.X.X.X:443 Local:X.X.X.X]@739028 useCount=1 bytesRead=0 bytesWritten=0 age=55221ms lastIO=55221ms isOpen=true handshake timeout
Se você encontrar esse erro no arquivo de registro do processador de mensagens, continue investigando. Acesse Outras etapas de diagnóstico para usuários da nuvem privada e pública do Edge.
Se você não vir a mensagem de handshake no arquivo de registros, acesse Needs Gather Diagnostic Information.
Mais etapas de diagnóstico para usuários da nuvem privada e pública do Edge
Para identificar o problema com mais precisão, use a ferramenta tcpdump, que analisa os pacotes TCP/IP para confirmar se o tempo limite foi atingido durante o handshake de TLS/SSL.
- Se você for um usuário da nuvem privada, poderá capturar os pacotes TCP/IP no servidor de back-end ou no processador de mensagens. De preferência, capture-os no servidor de back-end, porque os pacotes são descriptografados no servidor de back-end.
- Se você é um usuário da nuvem pública, não tem acesso ao processador de mensagens. No entanto, capturar os pacotes TCP/IP no servidor de back-end pode ajudar a identificar um problema.
Depois de decidir onde capturar os pacotes TCP/IP, use o seguinte comando tcpdump para capturar pacotes TCP/IP.
tcpdump -i any -s 0 host <IP address> -w <File name>
Se você estiver recebendo os pacotes TCP/IP no servidor de back-end, use o endereço IP público do processador de mensagens no comando
tcpdump
. Se precisar de ajuda para usar o comando para examinar o tráfego do servidor de back-end, consulte tcpdump.Se você estiver recebendo os pacotes TCP/IP no processador de mensagens, use o endereço IP público do servidor de back-end no comando
tcpdump
. Se você precisar de ajuda para usar o comando para examinar o tráfego do processador de mensagens, consulte tcpdump.Se houver vários endereços IP para o servidor de back-end/processador de mensagens, será necessário tentar outro uso do comando
tcpdump
. Consulte tcpdump para mais informações sobre essa ferramenta e outras variantes desse comando.
Analise os pacotes TCP/IP usando a ferramenta Wireshark ou uma ferramenta semelhante. A captura de tela a seguir mostra pacotes TCP/IP no Wireshark.
Observe na saída do Wireshark que o handshake de TCP de três vias é concluído com sucesso nos três primeiros pacotes.
Em seguida, o processador de mensagens envia a mensagem "Client Hello" no pacote no 4.
Como não há confirmação do servidor de back-end, o processador de mensagens retransmite a mensagem "Client Hello" várias vezes nos pacotes 5, 6 e 7 depois de aguardar um intervalo de tempo predefinido.
Quando o processador de mensagens não recebe confirmação após três tentativas, ele envia a mensagem FIN, ACK para o servidor de back-end para indicar que está encerrando a conexão.
Conforme mostrado no exemplo de sessão do Wireshark, a conexão com o back-end foi bem-sucedida (etapa 1). No entanto, o handshake de SSL expirou porque o servidor de back-end nunca respondeu.
Se você executou as etapas de solução de problemas neste manual e determinou que um tempo limite causou um erro de handshake de TLS/SSL, acesse a seção Resolução.
Como usar o monitoramento de APIs para identificar um problema
O Monitoramento de API permite isolar as áreas de problema rapidamente para diagnosticar erros, desempenho e latência e a origem, como apps de desenvolvedores, proxies de API, destinos de back-end ou a plataforma da API.
Consulte um exemplo de cenário que demonstra como resolver problemas 5xx com suas APIs usando o monitoramento de APIs. Por exemplo, configure um alerta para receber uma notificação quando o número de falhas de messaging.adaptors.http.BadGateway exceder um determinado limite.
Resolução
Normalmente, os tempos limite de handshake de SSL ocorrem devido a restrições de firewall no servidor de back-end que bloqueiam o tráfego do Apigee Edge. Se você tiver seguido as etapas de diagnóstico e determinado que a causa do erro de handshake é um tempo limite, precisará entrar em contato com sua equipe de rede para identificar a causa e corrigir as restrições de firewall.
As restrições de firewall podem ser impostas em diferentes camadas de rede. É importante remover as restrições em todas as camadas de rede relacionadas aos IPs do processador de mensagens para garantir um fluxo de tráfego tranquilo entre o Apigee Edge e o servidor de back-end.
Se não houver restrições de firewall e/ou o problema persistir, acesse Precisa de informações de diagnóstico.
É necessário coletar informações de diagnóstico
Se o problema persistir mesmo depois de seguir as instruções acima, colete as seguintes informações de diagnóstico. Entre em contato e compartilhe com o suporte do Apigee Edge:
- Se você for usuário de nuvem pública, forneça as seguintes informações:
- Nome da organização
- Nome do ambiente
- Nome de proxy da API
- Concluir o comando curl para reproduzir o erro
- Arquivo de rastreamento mostrando o erro
- Pacotes TCP/IP capturados no servidor de back-end
- Se você é um usuário da nuvem privada, forneça as seguintes informações:
- Mensagem de erro concluída observada
- Pacote de proxy de API
- Arquivo de rastreamento mostrando o erro
- Registros do processador de mensagens /opt/apigee/var/log/edge-message-processor/logs/system.log
- Pacotes TCP/IP capturados no servidor de back-end ou no processador de mensagens.
- Detalhes sobre quais seções deste Manual você experimentou e quaisquer outras informações que nos ajudarão a agilizar a resolução deste problema.