Inicio » Cómo diagnosticar y reparar el error 502 Bad Gateway en Nginx reverse proxy
Sistemas y Servidores

Cómo diagnosticar y reparar el error 502 Bad Gateway en Nginx reverse proxy

✨ Respuesta Rápida

El error 502 Bad Gateway en un servidor web Nginx configurado como proxy inverso significa que Nginx ha recibido una respuesta inválida (o ninguna respuesta) del servidor de origen o backend (como PHP-FPM, un proceso de Node.js, Gunicorn o un contenedor de Docker) al intentar transferir la petición del cliente.

El Diagnóstico Rápido

Causa
Servicio de aplicación (PHP-FPM, Node.js, Gunicorn) fuera de servicio
Solución
Verificar e iniciar el servicio backend con systemctl status php-fpm o Docker
Causa
Puerto o socket UNIX mal configurado en la directiva proxy_pass
Solución
Corregir la ruta del socket /var/run/php/php-fpm.sock o puerto en nginx.conf

El error 502 Bad Gateway en un servidor web Nginx configurado como proxy inverso significa que Nginx ha recibido una respuesta inválida (o ninguna respuesta) del servidor de origen o backend (como PHP-FPM, un proceso de Node.js, Gunicorn o un contenedor de Docker) al intentar transferir la petición del cliente.

La Solución Paso a Paso

  1. 1

    Paso 1: Comprobar el estado del servicio del backend

    Nginx no puede despachar la consulta si el servicio que procesa la lógica interna de tu aplicación web se ha detenido. Comprueba su estado en consola:

    BASH
    # Ejemplo si tu aplicación usa PHP-FPM
    sudo systemctl status php8.2-fpm
    
    # Ejemplo si usas NodeJS en segundo plano con PM2
    pm2 status
    
    # Ejemplo si corres el backend en contenedores
    docker ps
    

    (Si el servicio trasero está inactivo, inicialo de inmediato: sudo systemctl start php8.2-fpm).

  2. 2

    Paso 2: Verificar la ruta del Socket o Puerto en la configuración

    Si el backend está activo pero sigues recibiendo el error 502, es probable que Nginx esté intentando comunicarse a través de un puerto o socket unix incorrecto. Abre el archivo de configuración del bloque de tu sitio /etc/nginx/sites-available/default:

    NGINX
    # Ejemplo de enrutamiento por Socket Unix. Verifica que la ruta física del archivo .sock sea idéntica
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    
    # Ejemplo de enrutamiento por puerto local. Asegura que el servicio escuche en el puerto correcto
    proxy_pass http://127.0.0.1:3000;
    
  3. 3

    Paso 3: Revisar el registro detallado de logs de Nginx

    El log de errores de Nginx te dará la causa de conexión rechazada exacta. Inspecciónalo en tiempo real:

    BASH
    sudo tail -n 50 -f /var/log/nginx/error.log
    

    (Busca descriptores como Connection refused o Permission denied en la comunicación con el socket).

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • Configura sistemas de monitorización o guardianes (watchdogs) automáticos para tus backends. Si una fuga de memoria provoca que tu aplicación de NodeJS o PHP-FPM colapse repentinamente y deje a Nginx incomunicado, herramientas como Systemd (con la directiva Restart=on-failure) o gestores de procesos como PM2 levantarán el servicio de forma automática en milisegundos, mitigando la aparición del error 502 a tus visitantes.