Inicio » Cómo solucionar el error 504 Gateway Timeout en Nginx con PHP-FPM (Rápido)
Sistemas y Servidores

Cómo solucionar el error 504 Gateway Timeout en Nginx con PHP-FPM (Rápido)

El Diagnóstico Rápido

El error 504 Gateway Timeout ocurre cuando Nginx actúa como proxy inverso frente a un servidor backend (como PHP-FPM) y este último no responde a tiempo antes de que expire el límite de espera configurado en el servidor web.

🔍 El Diagnóstico Rápido

Síntoma Causa Raíz Solución
HTTP 504 Gateway Timeout al procesar scripts PHP pesados Nginx o PHP-FPM interrumpe la conexión porque el script tarda más que fastcgi_read_timeout o max_execution_time Aumentar los valores de timeout en nginx.conf y en los archivos de configuración de PHP-FPM

🚀 Cómo solucionar el error paso a paso

Paso 1: Aumentar los timeouts en la configuración de Nginx

Abre el archivo de configuración del sitio en Nginx (por ejemplo /etc/nginx/sites-available/default o /etc/nginx/conf.d/default.conf):

NGINX
server {
    listen 80;
    server_name example.com;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Aumentar el tiempo límite de lectura e interconexión con FastCGI
        fastcgi_connect_timeout 300s;
        fastcgi_send_timeout 300s;
        fastcgi_read_timeout 300s;
    }
}

Paso 2: Configurar los límites de ejecución en PHP-FPM

Ajusta la directiva de tiempo de ejecución en tu archivo php.ini (/etc/php/8.2/fpm/php.ini):

INI
max_execution_time = 300
max_input_time = 300
memory_limit = 256M

Además, asegúrate de actualizar el archivo del pool de PHP-FPM (/etc/php/8.2/fpm/pool.d/www.conf):

INI
request_terminate_timeout = 300s

Paso 3: Validar y reiniciar los servicios

Verifica que la sintaxis de Nginx sea correcta antes de aplicar los cambios:

BASH
sudo nginx -t

Si el resultado es exitoso, reinicia Nginx y PHP-FPM:

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

Consejo de Prevención

Prácticas de seguridad recomendadas:

  • Delegar procesos pesados a colas en segundo plano: Utiliza herramientas como Redis y Celery/Supervisor o Laravel Queues para tareas como generación de reportes o procesamiento de imágenes.
  • Monitorear el registro de consultas lentas: Activa el request_slowlog_timeout en PHP-FPM para detectar consultas SQL o funciones que ralentizan las peticiones web.
  • Optimizar consultas a la base de datos: Agrega índices en MySQL/PostgreSQL para evitar bloqueos prolongados durante peticiones HTTP.