Inicio » [SOLUCIONADO] Error 502 Bad Gateway en Nginx con PHP-FPM
Sistemas y Servidores

[SOLUCIONADO] Error 502 Bad Gateway en Nginx con PHP-FPM

✨ Respuesta Rápida

El error 502 Bad Gateway en un servidor web Nginx con PHP-FPM ocurre cuando Nginx actúa como proxy inverso pero no logra comunicarse con el proceso de escucha de PHP. El mensaje de error típico en /var/log/nginx/error.log es: connect() to unix:/run/php/php8.2-fpm.sock failed (2: No such file or directory) o Connection refused.

El Diagnóstico Rápido

Causa
Servicio php-fpm detenido o no iniciado
Solución
Iniciar el demonio de PHP: sudo systemctl start php-fpm (o php8.2-fpm)
Causa
Permisos insuficientes en el archivo socket UNIX /var/run/php/php-fpm.sock
Solución
Cambiar propietario del socket a www-data:www-data en /etc/php/fpm/pool.d/www.conf

El error 502 Bad Gateway en un servidor web Nginx con PHP-FPM ocurre cuando Nginx actúa como proxy inverso pero no logra comunicarse con el proceso de escucha de PHP. El mensaje de error típico en /var/log/nginx/error.log es: connect() to unix:/run/php/php8.2-fpm.sock failed (2: No such file or directory) o Connection refused.

Solución Rápida (1 Minuto):

  1. Inicia el servicio PHP-FPM de tu versión instalada: sudo systemctl restart php8.2-fpm
  2. Revisa que la ruta del socket en el fastcgi_pass de Nginx coincida exactamente con la versión activa de PHP.

La Solución Paso a Paso

  1. 1

    Paso 1: Verificar el estado del demonio PHP-FPM

    Asegúrate de que el servicio de PHP-FPM esté activo en tu servidor:

    BASH
    # Comprobar el servicio (ajusta según tu versión: 8.1, 8.2, 8.3)
    sudo systemctl status php8.2-fpm
    

    Si el estado indica inactive (dead) o failed, inicialízalo:

    BASH
    sudo systemctl enable --now php8.2-fpm
    
  2. 2

    Paso 2: Verificar la ubicación exacta del archivo Socket (.sock)

    Comprueba la ruta real donde PHP-FPM está escuchando las conexiones:

    BASH
    ls -la /run/php/
    

    Salida esperada: php8.2-fpm.sock o php8.3-fpm.sock.

    Abre el archivo de configuración del bloque de servidor de tu sitio en /etc/nginx/sites-available/tudominio.conf:

    NGINX
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # La ruta DEBE coincidir exactamente con el archivo .sock de tu sistema:
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }
    
  3. 3

    Paso 3: Corregir permisos en el socket de PHP-FPM

    Si el archivo .sock existe pero Nginx muestra Permission denied en sus registros:

    Abre la configuración del pool de usuarios de PHP-FPM:

    BASH
    sudo nano /etc/php/8.2/fpm/pool.d/www.conf
    

    Asegúrate de que el propietario del socket sea el mismo usuario que ejecuta Nginx (www-data):

    INI
    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    

    Reinicia PHP-FPM y Nginx:

    BASH
    sudo systemctl restart php8.2-fpm
    sudo systemctl restart nginx
    

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • Al actualizar la versión de PHP en el servidor (ej. de PHP 8.1 a 8.3), recuerda actualizar la ruta fastcgi_pass en Nginx, de lo contrario volverá el error 502.