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

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

Um código de status HTTP 502 (gateway inválido) indica que o CloudFront não pôde fornecer o objeto solicitado porque não foi possível conectar-se ao servidor de origem.

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

Se você usar uma origem personalizada e tiver configurado o CloudFront para exigir HTTPS entre o CloudFront e a origem, o problema poderá ser que os nomes de domínio não correspondam. O certificado SSL/TLS instalado em sua origem inclui um nome de domínio no campo Common Name (Nome comum) e possivelmente vários outros no campo Subject Alternative Names (Nomes alternativos do assunto). (O CloudFront oferece suporte a caracteres curinga em nomes de domínio de certificados.) Um dos nomes de domínio no certificado deve corresponder a um ou aos dois valores abaixo:

  • O valor especificado em Origin Domain Name para a origem aplicável na sua distribuição.

  • O valor do cabeçalho Host, se você tiver configurado o CloudFront para encaminhar o cabeçalho Host para a origem. Para obter mais informações sobre como encaminhar o cabeçalho Host para sua origem, consulte Armazenar conteúdo em cache com base nos cabeçalhos de solicitação.

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 são correspondentes ao Nome de domínio de origem da distribuição ou ao cabeçalho Host, você pode usar um verificador SSL online 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 seu 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 seu servidor de origem (substitua o nome de domínio de origem pelo nome de domínio do servidor de origem, como example.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 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 Criptografias e protocolos compatíveis. 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 sua origem é compatível com as criptografias e protocolos usando o SSL Labs:

  • 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-os com a lista de Supported Ciphers and Protocols.

nota

Se estiver usando o Elastic Load Balancing, consulte Políticas de segurança SSL para o Elastic Load Balancing no Guia do Usuário do Elastic Load Balancing para saber como definir as criptografias e os protocolos. O uso da política de segurança predefinida ELBSecurityPolicy-2016-08 concede ao CloudFront acesso ao balanceador de carga. Para restringir ainda mais usando uma política personalizada, permita as criptografias compatíveis com o CloudFront.

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 em seu servidor de origem personalizado, consulte Requiring HTTPS for Communication Between CloudFront and Your Custom Origin.

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. Para obter mais informações, consulte Intervalos de endereços IP da AWS na Referência geral da Amazon Web Services. Além disso, verifique se o seu servidor da web está em execução na origem.

O CloudFront não pôde resolver o domínio da origem devido a problemas de DNS

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 atualizado. Para fazer uma solicitação bem-sucedida para a origem, o CloudFront executa uma resolução de DNS no nome de domínio da origem. No entanto, se o serviço DNS que hospeda o domínio estiver com problemas, o CloudFront não poderá resolver o nome de domínio para obter o endereço IP, resultando em um erro 502. Para corrigir esse problema, entre em contato com o provedor de DNS ou, se você estiver usando o Amazon Route 53, consulte o DNS do Amazon 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. Os servidores de nome autoritativos recebem a solicitação e retornam o endereço IP associado ao domínio, e são os mesmos que os servidores DNS usados para configurar a distribuição do CloudFront. Use os seguintes comandos para encontrar os servidores de nome da origem do seu apex:

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 @NameServerFromAbove nslookup OriginDomainName NameServerFromAbove

Erros de validação de função do Lambda@Edge

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