Ecco come risolvere l’errore 504 Gateway Timeout con nginx in modalità standalone o proxy

Una configurazione superficiale di nginx e PHP possono portare problemi su operazioni più complesse e lunghe, in particolare quando uno script impiega più di un certo numero di secondi per eseguire le operazioni, facendo restituire un messaggio d’errore alla pagina identificato con errore 504. I messaggi in base alla configurazione che potremo trovare sono i seguenti:

  • “504 Gateway Timeout”
  • “504 Gateway Time-Out”
  • “504 Gateway Timeout NGINX”
  • “Nginx 504 Gateway Timeout”
  • “HTTP 504 Gateway Timeout”
  • “HTTP 504 Error”
  • “HTTP 504”
  • “Gateway Timeout (504)”

Vediamo come procedere per correggere l’errore 504 Gateway Timeout con Nginx.

In questa guida interverremo su un sistema ubuntu/debian con nginx+PHP-FPM (PHP 5.x). Prima di tutto dobbiamo modificare max_execution_time nel file /etc/php5/fpm/php.ini di PHP-FPM portandolo a 600 o 900.

max_execution_time = 900

Ora cerchiamo la stringa request_terminate_timeout nel file /etc/php5/fpm/pool.d/www.conf e impostiamo 900

request_terminate_timeout = 900

ora nel blocco del vhost di nginx dobbiamo aggiungere
questa può cambiare. Ad esempio potrestre trovare qualcosa come questo

location @php {
                try_files $uri =404;
                fastcgi_pass unix:/var/lib/php5-fpm/web10.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_read_timeout 900;
}

o questo

location ~ .php$ {
                root /var/www/sites/nginxtips.com;
                try_files $uri =404;
                fastcgi_pass unix:/tmp/php5-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_read_timeout 900;
}

ovviaemente questi sono puramente esempi, dovrete inserire fastcgi_read_timeout 900; al posto giusto. Infine riavviamo i servizi

service php-fpm restart
service nginx restart

Se usiamo invece nginx come reverse proxy, nel file nginx.conf aggiungiamo queste stringhe

  proxy_connect_timeout       900;
  proxy_send_timeout          900;
  proxy_read_timeout          900;
  send_timeout                900;

anche in questo caso diamo un

service php-fpm restart
service nginx restart