Introducción al Error Nginx 502 Bad Gateway en Linux
El error 502 Bad Gateway es uno de los problemas más comunes a los que se enfrentan los administradores de sistemas al gestionar servidores web basados en Linux. Este código de estado HTTP indica que el servidor web, actuando como un proxy inverso (como Nginx), recibió una respuesta inválida del servidor de backend (como PHP-FPM o uWSGI).
Causas Principales del Error 502 Bad Gateway
Antes de aplicar cualquier solución, es importante entender por qué ocurre este fallo en distribuciones como Ubuntu o Debian:
- El servicio de backend (PHP-FPM) se ha detenido o ha caído debido a un consumo excesivo de memoria.
- Configuración incorrecta en el archivo de bloques de servidor de Nginx (puertos o sockets mal direccionados).
- Tiempo de espera agotado (Timeout) en las conexiones entre Nginx y el procesador de scripts.
- Falta de recursos en el servidor Linux (RAM o CPU al 100%).
Método 1: Verificar y reiniciar el servicio PHP-FPM
La causa más frecuente en entornos LEMP (Linux, Nginx, MySQL, PHP) es que el servicio PHP-FPM no esté ejecutándose correctamente. Para comprobar su estado y reiniciarlo, ejecuta los siguientes comandos en tu terminal:
- Comprueba el estado actual del servicio con:
sudo systemctl status php8.1-fpm(reemplaza 8.1 por tu versión de PHP). - Si está detenido o muestra errores, reinícalo con:
sudo systemctl restart php8.1-fpm. - Habilita el inicio automático al arrancar el sistema:
sudo systemctl enable php8.1-fpm.
Método 2: Corregir la ruta del socket de PHP-FPM en Nginx
A menudo, tras actualizar PHP, la ruta del archivo socket cambia y Nginx sigue buscando en la dirección anterior. Sigue estos pasos para solucionarlo:
- Edita la configuración de tu sitio en Nginx:
sudo nano /etc/nginx/sites-available/tusitio.com - Busca la línea que define
fastcgi_passy asegúrate de que coincida con el socket real, por ejemplo:fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; - Verifica que la sintaxis de Nginx sea correcta:
sudo nginx -t - Recarga Nginx para aplicar los cambios:
sudo systemctl reload nginx
Método 3: Ajustar los límites de Timeout en Nginx
Si tus scripts tardan demasiado en ejecutarse, Nginx puede cerrar la conexión prematuramente generando el error 502. Puedes aumentar el tiempo de espera añadiendo las siguientes directivas dentro del bloque http o server en /etc/nginx/nginx.conf:
fastcgi_read_timeout 300;proxy_read_timeout 300;
Guarda el archivo y reinicia Nginx ejecutando: sudo systemctl restart nginx. Con estos pasos, tu servidor Linux debería volver a funcionar con normalidad.