Error intermitente HTTP 502 con el balanceador de carga de Amazon (AWS) y Apache

Error intermitente HTTP 502 con el balanceador de carga de Amazon (AWS) y Apache

Configuré un equilibrador de carga en AWS que enruta el tráfico a un servidor Apache Ubuntu.

Cuando busco mi URL, a veces todo va bien. Luego presiono el botón Actualizar y empiezo a recibir errores 502 al descargar algunos archivos. Son archivos diferentes cada vez.

Luego presiono Actualizar nuevamente y todo va bien.

Actualmente soy el único que usa el servidor.

Mi balanceador de carga está configurado así:

  • Zonas de disponibilidad: us-east-1a y us-east-1b
  • Grupos de seguridad: puerto 80 y 443 abiertos
  • Oyentes: el puerto 80 redirige al puerto 443, el puerto 443 reenvía a mi destino

Mi grupo objetivo está configurado así:

  • Tipo de objetivo: instancia
  • Protocolo: HTTP: 80
  • Balanceador de carga: nombre de mi balanceador de carga
  • Registrar objetivos: tengo 1 instancia ejecutándose en cada zona.

Mi grupo de Auto Scaling está configurado así:

  • Capacidad deseada: 2
  • Capacidad mínima: 2
  • Capacidad máxima: 5
  • Zonas de disponibilidad: us-east-1a, us-east-1b

Mi servidor Apache está configurado con los valores de instalación predeterminados, además de:

  • Mantener vivo encendido
  • Tiempo de espera 120
  • Mantener vivo tiempo de espera 120
  • MaxKeepAliveSolicitudes 100
  • AcceptFilter http ninguno
  • AceptarFiltro https ninguno

No soy un servidor, soy programador, así que realmente no sé qué comprobar. Pensé que configurar un Load Balancer era sencillo...

Gracias por tu ayuda

EDITAR 2020-08-27 15h39

Habilité los registros en la VPC y en el Load Balancer y actualicé mi página. Tuve un error 502 en un archivo específico.

En los registros del Load Balancer, veo la entrada 502 para el archivo específico. Aquí está la entrada, en formato JSON, en la que reemplacé todos los datos sensibles.

[
  {
    "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": "-"
  }
]

¡No sé si esos datos te pueden ayudar a ayudarme!

EDITAR 2020-08-31 (1)

Abrí las dos máquinas virtuales en el Firewall para acceder a ellas directamente. Cuando accedo a cada servidor directamente, no aparece ningún error 502. Cuando accedo a través del balanceador de carga, obtengo el 502.

EDITAR 2020-08-31 (2)

Cambié mi balanceador de carga para enrutar el tráfico HTTP a la instancia en lugar de redirigirlo al puerto 443.

En el puerto 80, no recibo errores 502. Actualicé muchas veces y no obtuve 502. Tan pronto como accedo al balanceador de carga con https, empiezo a recibir errores 502. Te recuerdo que cuando accedo directamente a la VM con https, no me sale 502.

Respuesta1

Me encontré con esta publicación en el foro: Foro de desarrolladores de AWS

La última entrada en realidad me dio la respuesta:

Asegúrese de no estar utilizando el módulo MPM de eventos de Apache (predeterminado) cuando esté detrás de un ALB/ELB. Cierra conexiones dinámicamente. Pruebe el trabajador MPM.

Cambié mi configuración de Apache para usar MPM trabajador y, hasta donde llega, no tuve ningún error 502.

Respuesta2

Probé MPM de trabajador y de evento y ninguno de ellos eliminó por completo el 502 aleatorio. Finalmente cambié a MPM previo a la bifurcación y esto solucionó el problema. Esto está en Apache en el medio entre ALB y Tomcat.

información relacionada