¿Cómo se pueden solucionar los errores HTTP 502 cuando se realizan solicitudes a través de un equilibrador de carga clásico?
Aparecen errores HTTP 502 cuando el cliente realiza solicitudes a un sitio web a través de un equilibrador de carga clásico (CLB). ¿Cómo se puede solucionar este problema?
Descripción corta
Los errores HTTP 502 (bad gateway) (puerta de enlace no válida) pueden ocurrir por una de las siguientes razones:
- El servidor web o los servidores de aplicaciones backend asociados que se ejecutan en instancias EC2 regresan un mensaje que el equilibrador de carga clásico no puede analizar.
- El servidor web o los servidores de aplicaciones backend asociados regresan un mensaje de error 502 propio.
Para encontrar el origen de estos errores 502:
- Active los registros de acceso de Elastic Load Balancing (ELB) en su Classic Load Balancer para ver el código de respuesta del backend y de ELB para cada solicitud. Una entrada de registro de acceso contiene dos campos: un elb_status_code y un backend_status_code. Utilice estos códigos para determinar el origen del error 502.
- Consulte las métricas de Amazon CloudWatch sobre el equilibrador de carga para ver los errores 502 generados por el back-end, que aparecen en la métrica HTTPCode_Backend_5XX. Los errores 502 generados por ELB aparecen bajo la métrica HTTPCode_ELB_5XX.
Si la respuesta del backend es la fuente del error 502 de ELB, el problema podría causarlo:
- Una respuesta que contiene más de un CRLF entre cada encabezado.
- Una respuesta que contiene un encabezado Content-Length que contiene un número no entero.
- Una respuesta que tiene más bytes en el cuerpo que el valor del encabezado Content-Length.
Si el error 502 lo generan sus servidores backend, contacte con el propietario de su aplicación. Si el error 502 lo genera el equilibrador de carga clásico, la respuesta HTTP del backend tiene un formato incorrecto. Siga estos pasos para solucionar los errores 502 generados por ELB:
Resolución
1. Verifique si el cuerpo de la respuesta devuelto por la aplicación back-end cumple con las especificaciones HTTP. Consulte la siguiente documentación que aparece en el editor de RFC:
RFC 7230 - HTTP/1.1: sintaxis y enrutamiento de mensajes
RFC 7231 - HTTP/1.1: semántica y contenido
RFC 7232 - HTTP/1.1: solicitudes condicionales
RFC 7233 - HTTP/1.1: solicitudes de rango
RFC 7234 - HTTP/1.1: caché
RFC 7235 - HTTP/1.1: autenticación
2. Confirme que el encabezado de respuesta tenga la sintaxis correcta: una clave y el valor, como Content-Type:text. Asegúrese de que no falte Content-Length o la codificación de la transferencia en el encabezado de la respuesta HTTP. Para obtener más información sobre los campos de encabezado de HTTP del servidor web, consulte la documentación de la Autoridad de Números Asignados de Internet en Lista de campos de encabezado de HTTP. Examine las respuestas HTTP devueltas. Para ello, ejecute un comando similar al siguiente:
curl -vko /dev/null server_instance_IP
3. Verifique el registro de acceso de ELB en busca de errores HTTP 502 duplicados. Los errores 502, tanto para elb_status_code como para backend_status_code, indican que hay un problema con una o más instancias del servidor web. Identifique qué instancias del servidor web están mostrando el problema y verifique los registros del servidor web de las instancias del servidor web backend. Consulte las siguientes ubicaciones de registro para algunos servidores web y sistemas operativos comunes:
Registros de Apache
- Los registros del servidor web para CentOS, RHEL, Fedora y Amazon Linux se encuentran en el directorio /var/log/httpd/.
- Los registros del servidor web para Debian y Ubuntu Linux se encuentran en el directorio /var/log/apache2 y /var/log/lighthttpd/.
Registros de NGINX
- La ubicación de los registros de acceso de NGINX se define en el archivo nginx.conf: access_log /path/to/access.log
- La ubicación predeterminada es /var/log/nginx/access.log
Registros de IIS
Los registros del servidor web para Windows IIS 7, IIS 7.5 e IIS 8.0 se almacenan en el directorio inetpub\logs\Logfiles. Para obtener más información sobre los registros de Internet Information Server (IIS), consulte la documentación de Microsoft en El código de estado HTTP en IIS 7.0 y versiones posteriores. Si confirmó que los errores 502 son generados por ELB y que la respuesta del back-end se ajusta a las convenciones RFC, póngase en contacto con AWS Support.
Información relacionada
Solución de problemas de un Classic Load Balancer: métricas de código de respuesta
Tutorial: Crear un Classic Load Balancer
Administración de identidades y acceso para Elastic Load Balancing
Configurar las comprobaciones de estado para el Classic Load Balancer
Administración del tiempo de espera de la conexión de Elastic Load Balancing
Contenido relevante
- OFICIAL DE AWSActualizada hace 6 meses
- OFICIAL DE AWSActualizada hace un mes
- OFICIAL DE AWSActualizada hace 2 años