Código de status HTTP 502 (Gateway inválido) - Amazon CloudFront

Código de status HTTP 502 (Gateway inválido)

O CloudFront exibe um código de status HTTP “502 (Gateway inválido)” quando ele não consegue fornecer o objeto solicitado devido à impossibilidade de se conectar ao servidor de origem.

Se você estiver usando o Lambda@Edge, o problema pode ser um erro de validação do Lambda. Se você receber um erro HTTP 502 com o código de erro NonS3OriginDnsError, provavelmente há um problema de configuração de DNS que impede o CloudFront de se conectar à origem.

Falha de negociação SSL/TLS entre o CloudFront e um servidor de origem personalizado

Se você usar uma origem personalizada que exija HTTPS entre o CloudFront e a origem, nomes de domínio não correspondentes poderão causar erros. O certificado SSL/TLS em sua origem deve incluir um nome de domínio que corresponda ao domínio de origem que você especificou para a distribuição do CloudFront ou ao cabeçalho Host da solicitação de origem.

Se os nomes de domínio não coincidirem, o handshake SSL/TLS falhará e o CloudFront retornará um código de status HTTP 502 (gateway inválido) e definirá o cabeçalho X-Cache como Error from cloudfront.

Para determinar se os nomes de domínio no certificado correspondem ao Domínio de origem da distribuição ou ao cabeçalho Host, você pode usar um verificador SSL on-line ou o OpenSSL. Se os nomes de domínio não forem correspondentes, você tem duas opções:

  • Obtenha um novo certificado SSL/TLS que inclua os nomes de domínio aplicáveis.

    Se você usar o AWS Certificate Manager (ACM), consulte Solicitar um certificado no Guia do usuário do AWS Certificate Manager para solicitar um novo certificado.

  • Altere a configuração da distribuição para que o CloudFront não tente mais usar SSL para conectar-se à origem.

Verificador SSL online

Para encontrar uma ferramenta de teste de SSL, pesquise na Internet por "verificador ssl online". Normalmente, você especifica o nome do seu domínio, e a ferramenta retorna uma variedade de informações sobre seu certificado SSL/TLS. Confirme se o certificado contém seu nome de domínio nos campos Nome comum ou Nomes alternativos da entidade.

OpenSSL

Para ajudar a solucionar problemas de erros HTTP 502 no CloudFront, você pode usar o OpenSSL para tentar fazer uma conexão SSL/TLS com o servidor de origem. Se o OpenSSL não for capaz de fazer uma conexão, isso pode indicar um problema com a configuração de SSL/TLS do servidor de origem. Se o OpenSSL for capaz de fazer uma conexão, ele retornará informações sobre o certificado do servidor de origem, incluindo o nome comum (campo Subject CN) e o nome alternativo da entidade (campo Subject Alternative Name) do certificado.

Use o seguinte comando OpenSSL para testar a conexão com o servidor de origem (substitua o domínio de origem pelo nome de domínio do servidor de origem, como exemplo.com):

openssl s_client -connect origin domain name:443

Se o seguinte for verdadeiro:

  • Seu servidor de origem oferece suporte a vários nomes de domínio com vários certificados SSL/TLS

  • Sua distribuição está configurada para encaminhar o cabeçalho Host para a origem

Depois adicione a opção -servername ao comando do OpenSSL, como no exemplo a seguir (substitua CNAME pelo CNAME configurado em sua distribuição):

openssl s_client -connect origin domain name:443 -servername CNAME

A origem não está respondendo com criptografias/protocolos compatíveis

O CloudFront se conecta a servidores de origem usando criptografias e protocolos. Para obter uma lista de criptografias e protocolos compatíveis com o CloudFront, consulte Protocolos e criptografias compatíveis entre o CloudFront e a origem. Caso a origem não responda com uma dessas criptografias ou protocolos na troca de SSL/TLS, ocorrerá uma falha na conexão do CloudFront. Você pode validar se a sua origem é compatível com as criptografias e os protocolos usando uma ferramenta online, como o SSL Labs. Digite o nome de domínio da sua origem no campo Hostname e, em seguida, escolha Submit. Analise os campos Common names e Alternative names do teste para ver se eles são correspondentes com o nome de domínio da sua origem. Após a conclusão do teste, encontre as seções Protocols e Cipher Suites nos resultados do teste para ver quais criptografias ou protocolos são compatíveis com sua origem. Compare o conteúdo com a lista de Protocolos e criptografias compatíveis entre o CloudFront e a origem.

O certificado SSL/TLS da origem expirou, é inválido ou autoassinado, ou a cadeia de certificados está no pedido errado

Se o servidor de origem retornar o seguinte, o CloudFront interromperá a conexão TCP, retornará o código de status HTTP 502 (gateway inválido) e definirá o cabeçalho X-Cache como Error from cloudfront:

  • Um certificado expirado

  • Certificado inválido

  • Certificado autoassinado

  • Cadeia de certificados na ordem errada

nota

Se toda a cadeia de certificados, inclusive o certificado intermediário, não estiver presente, o CloudFront interromperá a conexão TCP.

Para obter informações sobre como instalar um certificado SSL/TLS no seu servidor de origem personalizado, consulte Exigir HTTPS na comunicação entre o CloudFront e a origem personalizada.

A origem não está respondendo nas portas especificadas nas configurações

Ao criar uma origem na distribuição do CloudFront, defina as portas de conexão do CloudFront com a origem para tráfego HTTP e HTTPS. Por padrão, são elas: TCP 80/443. Você tem a opção de modificar essas portas. Caso a origem esteja rejeitando o tráfego nessas portas por algum motivo ou o servidor de backend não esteja respondendo nas portas, ocorrerá uma falha na conexão do CloudFront.

Para solucionar esses problemas, marque todos os firewalls em execução na sua infraestrutura e valide se eles não são bloqueando os intervalos de IP compatíveis. Consulte mais informações em Intervalos de endereços IP da AWS no Guia do usuário da Amazon VPC. Além disso, verifique se o seu servidor da web está em execução na origem.

Erro de validação do Lambda

Se você estiver usando o Lambda@Edge, um código de status HTTP 502 poderá indicar que a resposta da função do Lambda foi formada incorretamente ou incluía conteúdo inválido. Para obter mais informações sobre a solução de problema de erros do Lambda@Edge, consulte Testar e depurar as funções do Lambda@Edge.

Erro de validação da função do CloudFront

Se você estiver usando funções do CloudFront, um código de status HTTP 502 poderá indicar que a função do CloudFront está tentando adicionar, excluir ou alterar um cabeçalho somente para leitura. Esse erro não é exibido durante o teste, mas aparecerá depois que você implantar a função e executar a solicitação. Para solucionar esse erro, verifique e atualize a função do CloudFront. Para ter mais informações, consulte Atualizar funções.

Erro de DNS (NonS3OriginDnsError)

Um erro HTTP 502 com o código de erro NonS3OriginDnsError indica que há um problema de configuração de DNS que impede o CloudFront de se conectar à origem. Se você receber esse erro do CloudFront, verifique se a configuração de DNS da origem está correta e funcionando.

Ao receber uma solicitação de um objeto expirado ou não armazenado no cache, o CloudFront faz uma solicitação para a origem obter o objeto. Para fazer uma solicitação bem-sucedida para a origem, o CloudFront executa uma resolução de DNS no domínio da origem. Se o serviço DNS do domínio estiver com problemas, o CloudFront não poderá resolver o nome de domínio para obter o endereço IP, o que resultará em um erro HTTP 502 (NonS3OriginDnsError). Para corrigir esse problema, entre em contato com o seu provedor de DNS ou, se estiver utilizando o Amazon Route 53, consulte Why can't I access my website that uses Route 53 DNS services? (Por que não consigo acessar meu site que usa os serviços de DNS do Route 53?)

Para resolver ainda mais esse problema, certifique-se de que os servidores de nome autoritativos do domínio raiz da origem ou do apex de zona (como example.com) estejam funcionando corretamente. Você pode usar os seguintes comandos para encontrar os servidores de nome da origem do apex com uma ferramenta como dig ou nslookup:

dig OriginAPEXDomainName NS +short
nslookup -query=NS OriginAPEXDomainName

Quando você tiver os nomes dos seus servidores de nome, use os seguintes comandos para consultar o nome de domínio da sua origem neles e garantir que cada um responda com uma resposta:

dig OriginDomainName @NameServer
nslookup OriginDomainName NameServer
Importante

Executa essa resolução de problemas de DNS usando um computador conectado à Internet pública. Como o CloudFront resolve o domínio de origem usando DNS público na internet, é importante solucionar problemas em um contexto semelhante.

Se a origem for um subdomínio cuja autoridade DNS está delegada a um servidor de nomes diferente do domínio raiz, verifique se os registros do servidor de nomes (NS) e início de autoridade (SOA) estão configurados corretamente para o subdomínio. É possível verificar esses registros usando comandos semelhantes aos exemplos anteriores.

Para obter mais informações sobre DNS, consulte Conceitos de Domain Name System (DNS) na documentação do Amazon Route 53.

Erro 502 de origem do Application Load Balancer

Se você usa o Application Load Balancer como origem e recebe um erro 502, consulte Como soluciono os erros HTTP 502 do Application Load Balancer?.

Erro 502 de origem do API Gateway

Se você usa o API Gateway e recebe um erro 502, consulte Como faço para resolver erros HTTP 502 das APIs REST do API Gateway com integração de proxy do Lambda?.