Recebo erros HTTP 502 quando faço solicitações por meio de um Classic Load Balancer. Como corrijo esses erros?

Data da última atualização: 8/4/2022

Vejo 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:

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.    Confira se o corpo da resposta retornada pela aplicação de backend é compatível com especificações de HTTP, conforme mencionado nos seguintes RFCs:
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 o Content-Length ou a codificação de transferência não seja omitida no cabeçalho da resposta HTTP. Para obter mais informações sobre campos de cabeçalho HTTP do servidor Web, consulte Lista de campos de 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 estão armazenados no diretório inetpub\logs\Logfiles. Para obter mais informações sobre os logs do Internet Information Server (IIS), consulte O código de status HTTP no IIS 7.0 e as versões posteriores. Se você tiver confirmado que os erros 502 foram gerados pelo ELB e a resposta do backend foi compatível com convenções do RFC, entre em contato com o AWS Support.