¿Cómo soluciono los errores HTTP 502 del equilibrador de carga de aplicación?

7 minutos de lectura
0

Me encuentro con errores HTTP 502 en mi equilibrador de carga de aplicación.

Descripción breve

Hay varias posibles causas de los errores HTTP 502: bad gateway (HTTP 502: puerta de enlace no válida) y el origen puede provenir del destino o del equilibrador de carga de aplicación. Para identificar el origen del error, utilice las métricas de Amazon CloudWatch y los registros de acceso.

Antes de solucionar el error desde el equilibrador de carga de aplicación, asegúrese de activar el registro de acceso. Para entender qué significa cada campo del registro de acceso, consulte Entradas de los registros de acceso.

Si el destino es una función de AWS Lambda, consulte Solución de errores HTTP 502 cuando el destino es una función de Lambda en la sección Resolución.

Resolución

Búsqueda del origen de los errores HTTP 502

Uso de las métricas de CloudWatch

Si los puntos de datos aparecen en la métrica HTTPCode_ELB_502_Count, el equilibrador de carga es el origen de los errores HTTP 502. Si aparecen en la métrica HTTPCode_Target_5XX_Count, el origen de los errores es el destino.

Uso de registros de acceso

Si el elb_status_code es «502» y el target_status_code es «-», el equilibrador de carga es el origen de los errores HTTP 502. Si el elb_status_code es «502» y el target_status_code es «502», el origen de los errores es el destino.

Solución de errores HTTP 502

Nota: Filtre los registros de acceso por elb_status_code = "502" y target_status_code para determinar la causa más fácilmente. A continuación, complete los pasos pertinentes para su caso de uso.

El equilibrador de carga recibió un TCP RST del destino al intentar establecer una conexión.

Si recibe un TCP RST del destino al establecer una conexión, el equilibrador de carga no podrá establecer un protocolo de enlace TCP de 3 vías con el destino. Como resultado, el equilibrador de carga no puede reenviar la solicitud del usuario al destino.

  • Compruebe si hay puntos de datos para la métrica TargetConnectionErrorCount. Esta métrica representa el número de conexiones que no se han establecido correctamente entre el equilibrador de carga y el destino.
  • Compruebe si los campos request_processing_time, target_processing_time y response_processing_time de los registros de acceso están configurados con el valor**-1**. Este valor significa que el equilibrador de carga no puede enviar la solicitud al destino porque necesita una conexión correcta.

A continuación, aparece un ejemplo de una entrada de registro de acceso:

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 -1 -1 -1 502 - 86 155 "GET http://example.com:80/ HTTP/1.1"
"curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067" Root=1-58337262-36d228ad5d99923122bbe354"

**Nota:**En esta entrada de registro de acceso, request_processing_time, target_processing_time y response_processing_time están configurados en -1.

El equilibrador de carga recibió una respuesta inesperada del destino, como «ICMP Destination unreachable (Host unreachable)» (Destino ICMP inalcanzable [host inalcanzable]), al intentar establecer una conexión

  • Compruebe si los campos request_processing_time, target_processing_time y response_processing_time de los registros de acceso están todos configurados con el valor -1.
  • Compruebe si se permite el tráfico desde las subredes del equilibrador de carga a los destinos del puerto de destino.

El objetivo cerró la conexión con un TCP RST o un TCP FIN mientras el equilibrador de carga tenía una solicitud pendiente al destino.

El equilibrador de carga recibe una solicitud y la reenvía al destino. El destino recibe la solicitud y comienza a procesarla, pero cierra la conexión con el equilibrador de carga demasiado pronto. Esto suele ocurrir cuando la duración del tiempo de espera de mantenimiento de actividad del destino es inferior al valor de tiempo de espera de inactividad del equilibrador de carga. Asegúrese de que la duración del tiempo de espera de mantenimiento de actividad sea mayor que el valor del tiempo de espera de inactividad.

Compruebe los valores de los campos request_processing_time, target_processing_time y response_processing_time.

Consulte el siguiente ejemplo de entrada de registro de acceso:

http 2022-04-15T16:52:50.757968Z app/my-loadbalancer/50dc6c495c0c9188 192.168.131.39:2817 10.0.0.1:80 0.001 4.205 -1 502 - 94 326 "GET http://example.com:80 HTTP/1.1" "curl/7.51.0" - - arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-targets/73e2d6bc24d8a067 "Root=1-58337262-36d228ad5d99923122bbe354"

**Nota:**En esta entrada del registro de acceso, request_processing_time es 0.001, target_processing_time es 4.205 y response_processing_time es -1.

La respuesta del destino tiene un formato incorrecto o encabezados HTTP que no son válidos

Haga una captura de paquetes en el destino durante el período de tiempo del problema para comprender la respuesta del destino.

El equilibrador de carga detectó un error de protocolo de enlace SSL o un tiempo de espera de protocolo de enlace SSL (10 segundos) al conectarse a un destino

La conexión TCP desde el equilibrador de carga al agente de escucha HTTPS del destino se lleva a cabo correctamente, pero se agota el tiempo de espera del protocolo de enlace SSL posterior. Como resultado, el equilibrador de carga no puede reenviar la solicitud al destino.

Compruebe si el grupo de destino utiliza el protocolo HTTPS. Si no es así, el problema no se debe al tiempo de espera del protocolo de enlace SSL. Si el grupo de destino utiliza el protocolo HTTPS, compruebe los siguientes puntos:

  • Compruebe si los campos request_processing_time, target_processing_time y response_processing_time de los registros de acceso están todos configurados con el valor -1.
  • Compruebe si hay puntos de datos para la métrica TargetTLSNegotiationErrorCount.
  • Haga una captura de paquetes en el destino durante el período de tiempo del problema para validar que esté relacionado con un protocolo de enlace SSL. Si es así, complete los pasos de la sección Realización de una captura de paquetes.
  • Compruebe si los cifrados o los protocolos no coinciden.

El período de retraso de cancelación del registro transcurrió para una solicitud gestionada por un destino cuyo registro se canceló

En los eventos de CloudTrail, compruebe si hay una llamada a la API con la acción DeregisterTargets durante el período de tiempo del problema. Si se produjo una llamada a la API con DeregisterTargets durante el período de tiempo del problema, el error se debe a un destino cuyo registro se canceló demasiado pronto. Para resolver este problema, aumente el período de retraso de cancelación del registro para que las operaciones más lentas puedan completarse sin errores.

Solución de los errores HTTP 502 cuando el destino es una función de Lambda

Nota: Para las solicitudes a una función de Lambda que fallan, el equilibrador de carga almacena los códigos de motivo de error específicos de Lambda en el campo error_reason de los registros de acceso.

El destino es una función de Lambda y el cuerpo de la respuesta supera 1 MB

  • Compruebe si hay un punto de datos para la métrica LambdaUserError.
  • Compruebe si el campo error_reason del registro de acceso del equilibrador de carga está configurado en LambdaResponseToolarge.

El destino es una función de Lambda que no respondió antes de que se alcanzara el tiempo de espera configurado

  • Compruebe la configuración del tiempo de espera de la función de Lambda.
  • Compruebe si hay un punto de datos para la métrica LambdaUserError.
  • Compruebe si el campo error_reason del registro de acceso del equilibrador de carga está configurado en LambdaUnhandled.

El destino es una función de Lambda que devolvió un error o la función fue limitada por el servicio de Lambda

Póngase en contacto con AWS Support para obtener orientación sobre la limitación de los servicios.

Realización de una captura de paquetes

Para Linux, utilice el siguiente comando:

sudo tcpdump -i any -w filename.pcap

Para Microsoft Windows, descargue y utilice la aplicación Wireshark (del sitio web de Wireshark).

Para obtener más información, consulte How do I troubleshoot network performance issues between EC2 Linux or Windows instances in a VPC and an on-premises host over the internet gateway? (¿Cómo soluciono los problemas de rendimiento de red entre las instancias de EC2 de Linux o Windows en una VPC y un host local a través de la puerta de enlace de Internet?) Consulte las secciones Test packet capture samples using tcpdump (Pruebas de muestras de captura de paquetes con tcpdump) y Take a packet captur (Realización de una captura de paquetes).

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año