Metodi di pagamento Abuse

Correggere il time out del gateway 504 di Nginx

20.02.2024, 23:31

Un errore 504 Gateway Timeout in Nginx significa che il server che esegue Nginx non è stato in grado di ricevere una risposta dal server proxy entro il periodo di tempo specificato. Di solito questo accade perché il server proxy non è in grado di elaborare la richiesta entro il tempo specificato o a causa di problemi di connessione tra Nginx e il server proxy.

Perché appare 504 Gateway Timeout

L'errore si verifica quando il server Nginx funziona in modalità proxy. Questo accade quando si utilizza php-fpm o Apache. Se lo traduciamo dall'inglese al russo, otteniamo quanto segue: il tempo di attesa per una risposta dal server è stato superato.

Le ragioni di questo comportamento sono molteplici:

  • lo script PHP o di altra lingua si è completamente bloccato e non restituisce più alcuna risposta;
  • lo script è in esecuzione per un tempo molto lungo, ma Nginx ha un intervallo configurato per ripristinare la connessione se il server di destinazione non ha risposto alla richiesta entro il tempo assegnato;
  • il server è sovraccarico e non ha il tempo di servire tutti i client e di rispondere a tutte le richieste di Nginx.

Vediamo ora cosa si può fare e come risolvere l'errore 504 Gateway Timeout.

Come risolvere l'errore 504 gateway timeout di Nginx?

La prima cosa da provare in pratica è che se il vostro server, php-fpm o apache manca di risorse di sistema, come la memoria o la CPU, vedete la RAM libera usando il comando free:

$ free -h

È possibile conoscere il carico della CPU con il comando htop:

$ htop

Se si nota che PHP occupa tutto il tempo della CPU, significa che il problema riguarda le risorse del server. Si può cercare di intervenire sul motore del sito, ottimizzare le risorse o scegliere un server VPS potente.

La seconda opzione - se è stata pianificata in modo che lo script funzionasse per molto tempo. In questo caso, è necessario configurare Nginx per attendere una risposta da Apache o da php-fpm. Per risolvere il problema nel caso di php-fpm, è sufficiente aggiungere due righe al blocco di configurazione di fastgci:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 significa 300 secondi, per la maggior parte degli script è sufficiente, ma non è difficile impostarne di più se necessario. L'errore 504 può verificarsi anche quando Nginx è usato come proxy per Apache o qualsiasi altro server web, quindi è necessario configurare anche il timeout del proxy.

Aggiungere queste righe alla sezione server:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

In questo caso abbiamo un timeout di 600 secondi.

Ora è necessario riavviare Nginx:

$ sudo systemctl restart nginx

Un altro motivo e la sua soluzione se lo script si blocca. Se si esegue lo script da soli, si vedrà subito cosa si blocca, ma se questo errore viene riscontrato dagli utenti, il problema è più serio. Potete vedere se i vostri utenti stanno incontrando tali errori e dove si verificano utilizzando il comando:

$ fgrep -i " 504 " /var/log/nginx/access.log

Informazioni più dettagliate possono essere viste in error.log:

$ fgrep -i " 504 " /var/log/nginx/error.log

Inoltre, se il problema è php-fpm, è possibile individuare quali script vengono eseguiti lentamente utilizzando la funzione slow-log integrata.

Per attivarla, aggiungere le seguenti righe alla configurazione del pool:

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Questo completa l'istruzione.