Erro HTTP 502 intermitente com balanceador de carga Amazon (AWS) e Apache

Erro HTTP 502 intermitente com balanceador de carga Amazon (AWS) e Apache

Configurei um Load Balancer na AWS que roteia o tráfego para um servidor Apache Ubuntu.

Quando navego até meu URL, às vezes tudo corre bem. Então apertei o botão Atualizar e comecei a receber erros 502 ao baixar alguns arquivos. São arquivos diferentes a cada vez.

Então apertei Atualizar novamente e tudo correu bem.

Atualmente sou o único usando o servidor.

Meu balanceador de carga está configurado assim:

  • Zonas de disponibilidade: us-east-1a e us-east-1b
  • Grupos de segurança: portas 80 e 443 abertas
  • Ouvintes: A porta 80 redireciona para a porta 443, a porta 443 encaminha para meu destino

Meu grupo-alvo está configurado assim:

  • Tipo de destino: instância
  • Protocolo: HTTP: 80
  • Balanceador de carga: nome do meu balanceador de carga
  • Registrar alvos: tenho 1 instância em execução em cada zona.

Meu grupo de Auto Scaling está configurado assim:

  • Capacidade desejada: 2
  • Capacidade mínima: 2
  • Capacidade máxima: 5
  • Zonas de disponibilidade: us-east-1a, us-east-1b

Meu servidor Apache está configurado com os valores de instalação padrão, mais:

  • Manter ativo ativado
  • Tempo limite 120
  • KeepAliveTimeout 120
  • MaxKeepAliveRequests 100
  • AceitarFiltro http nenhum
  • AcceptFilter https nenhum

Não sou um servidor, sou um programador, então realmente não sei o que verificar. Achei que configurar um balanceador de carga fosse simples ...

Obrigado pela ajuda

EDITAR 2020-08-27 15h39

Habilitei os logs na VPC e no Load Balancer e atualizei minha página. Eu tive um erro 502 em um arquivo específico.

Nos logs do Load Balancer, vejo a entrada 502 para o arquivo específico. Aqui está a entrada - formatada em JSON - na qual substituí todos os dados sensíveis

[
  {
    "type": "h2",
    "time": "2020-08-27T19:20:52.547402Z",
    "elb": "app/web-server-load-balancer/**my-load-balancer-id**",
    "client:port": "*my-ip-address*:60831",
    "target:port": "10.0.0.106:80",
    "request_processing_time": 0,
    "target_processing_time": 0.013,
    "response_processing_time": -1,
    "elb_status_code": 502,
    "target_status_code": "-",
    "received_bytes": 45,
    "sent_bytes": 610,
    "request": "GET https://**my-url** HTTP/2.0",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
    "ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
    "ssl_protocol": "TLSv1.2",
    "target_group_arn": "**my-target-group-arn**",
    "trace_id": "Root=1-5f480794-150df3bcad7fd0ac6bdfc41c",
    "domain_name": "**my-domain-name**",
    "chosen_cert_arn": "session-reused",
    "matched_rule_priority": 0,
    "request_creation_time": "2020-08-27T19:20:52.534000Z",
    "actions_executed": "forward",
    "redirect_url": "-",
    "error_reason": "-",
    "target:port_list": "10.0.0.106:80",
    "target_status_code_list": "-",
    "classification": "-",
    "classification_reason": "-"
  }
]

Não sei se esses dados podem ajudar você a me ajudar!

EDITAR 31/08/2020 (1)

Abri as duas VMs no Firewall para acessá-las diretamente. Quando acesso cada servidor diretamente, não recebo nenhum erro 502. Quando acesso pelo Load balancer, recebo o 502.

EDITAR 31/08/2020 (2)

Alterei meu balanceador de carga para rotear o tráfego HTTP para a instância em vez de redirecioná-lo para a porta 443.

Na porta 80, não recebo erros 502. Atualizei muitas vezes e não obtive 502. Assim que acesso o balanceador de carga com https, começo a receber erros 502. Lembro de você que quando acesso diretamente a VM com https, não recebo 502.

Responder1

Me deparei com esta postagem no fórum: Fórum de desenvolvedores da AWS

A última entrada realmente me deu a resposta:

Certifique-se de não estar usando o módulo MPM de eventos do Apache (padrão) quando estiver atrás de um ALB/ELB. Ele fecha conexões dinamicamente. Experimente o MPM do trabalhador.

Mudei minha configuração do Apache para usar o MPM do trabalhador e, no que diz respeito, não tive nenhum erro 502.

Responder2

Tentei MPMs de trabalho e de evento e nenhum deles eliminou completamente o 502 aleatório. Finalmente mudei para o MPM pré-fork e isso resolveu o problema para mim. Isso está no Apache, no meio entre ALB e Tomcat.

informação relacionada