Como soluciono os erros HTTP 502 que recebo ao fazer solicitações por meio de um Classic Load Balancer?
Recebo erros HTTP 502 quando meu cliente faz solicitações a um site por meio de um Classic Load Balancer (CLB). Como posso solucionar isso?
Breve descrição
Erros HTTP 502 (gateway inválido) podem ocorrer por um dos seguintes motivos:
- O servidor Web ou os servidores da aplicação de backend associada que estão sendo executados em instâncias do EC2 retornam uma mensagem que não pode ser analisada por seu balanceador de carga clássico.
- O servidor Web ou os servidores da aplicação de backend associada retornam uma mensagem de erro 502 deles mesmos.
Para encontrar a fonte desses erros 502:
- Habilite os logs de acesso do Elastic Load Balancing (ELB) em seu Classic Load Balancer para ver o código de resposta do backend e do ELB para cada solicitação. Uma entrada de log de acesso contém dois campos: um elb_status_code e um backend_status_code. Use estes códigos para determinar a fonte do erro 502.
- Verifique as métricas do Amazon CloudWatch do balanceador de carga para ver os erros 502 gerados pelo backend, os quais são mostrados na métrica HTTPCode_Backend_5XX. Os erros 502 gerados pelo ELB são mostrados na métrica HTTPCode_ELB_5XX.
Se a resposta do backend for a fonte do erro 502 do ELB, o problema poderá ter sido causado por:
- Uma resposta contendo mais de uma CRLR entre cada cabeçalho.
- Uma resposta contendo um cabeçalho Content-Length que contenha um não inteiro.
- Uma resposta que tem mais bytes no corpo do que o valor do cabeçalho Content-Length.
Se o erro 502 for gerado pelos servidores de backend, entre em contato com o proprietário da aplicação. Se o erro 502 for gerado pelo balanceador de carga clássico, a resposta HTTP do backend será defeituosa. Siga estas etapas para solucionar problemas de erros 502 gerados pelo ELB:
Resolução
1. Verifique se o corpo da resposta retornada pela aplicação de backend é compatível com as especificações do HTTP. Consulte a seguinte documentação do RFC Editor:
RFC 7230 - HTTP/1.1: sintaxe e roteamento da mensagem
RFC 7231 - HTTP/1.1: semântica e conteúdo
RFC 7232 - HTTP/1.1: solicitações condicionais
RFC 7233 - HTTP/1.1: solicitações de intervalo
RFC 7234 - HTTP/1.1: armazenamento em cache
RFC 7235 - HTTP/1.1: autenticação
2. Confirme se o cabeçalho da resposta tem a sintaxe correta: uma chave e um valor, como Content-Type:text. Certifique-se de que Content-Length ou a codificação de transferência não sejam omitidos no cabeçalho da resposta HTTP. Para obter mais informações sobre os campos do cabeçalho HTTP do servidor Web, consulte a documentação da Internet Assigned Numbers Authority em List of HTTP header fields (Lista de campos do cabeçalho HTTP). Examine as respostas de HTTP retornadas executando um comando semelhante ao seguinte:
curl -vko /dev/null server_instance_IP
3. Confira o log de acesso do ELB para erros HTTP 502 em duplicidade. 502 erros para elb_status_code e backend_status_code indicam que há um problema com uma ou mais instâncias do servidor Web. Identifique quais instâncias do servidor Web estão exibindo o problema e, em seguida, confira os logs do servidor Web das instâncias do servidor Web de backend. Veja os seguintes locais de log para alguns servidores Web e sistemas operacionais comuns:
Logs do Apache
- Os logs do servidor Web para CentOS, RHEL, Fedora e Amazon Linux estão situados no diretório /var/log/httpd/.
- Os logs do servidor Web para Debian e Ubuntu Linux estão situados nos diretórios /var/log/apache2 e /var/log/lighthttpd/.
Logs do NGINX
- O local do log de acesso do NGINX é definido no arquivo nginx.conf: access_log /path/to/access.log
- O local padrão é /var/log/nginx/access.log
Logs do IIS
Os logs do servidor Web para Windows IIS 7, IIS 7.5 e IIS 8.0 são armazenados no diretório inetpub\logs\Logfiles. Para obter mais informações sobre os logs do Internet Information Server (IIS), consulte a documentação da Microsoft em The HTTP status code in IIS 7.0 and later versions (O código de status HTTP no IIS 7.0 e versões posteriores). Caso seja confirmado que os erros 502 foram gerados pelo ELB e a resposta do backend é compatível com as convenções do RFC, entre em contato com o AWS Support.
Informações relacionadas
Solucionar problemas de um Classic Load Balancer: métricas do código de resposta
Tutorial: Criar um Classic Load Balancer
Gerenciamento de identidade e acesso para o Elastic Load Balancing
Configurar verificações de integridade para o Classic Load Balancer
Gerenciamento do tempo limite da conexão do Elastic Load Balancing
Conteúdo relevante
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos