back to top

Errore 504 Gateway timeout, cos’è e come si risolve

Tra i codici di stato HTTP 5xx (Server Error), un posto di primo piano è occupato dall’errore 504 Gateway Timeout. In questo articolo analizzeremo approfonditamente le cause e le possibili soluzioni a questo fastidioso problema.

Guida completa all'errore 504 Gateway timeout

Quando si verifica l’errore 504 HTTP Gateway timeout?

L’errore 504 HTTP Gateway timeout è un errore piuttosto comune che si verifica quando l’applicativo remoto, che è stato contattato dal client, non è stato in grado a produrre il suo output entro il tempo massimo prestabilito.

La parola centrale nell’errore 504 è timeout: in pratica questo errore si verifica a causa di una eccessiva lentezza – a livello di rete, server o altro – che impedisce al client di visualizzare l’output della risorsa remota richiesta. Trascorso inutilmente il tempo massimo di attesa, il web-server contattato, non potendo servire l’output dello script, mostrerà all’utente una pagina di errore per avvisarlo dell’accaduto.

Errore 504 e tempo massimo di esecuzione

Il tempo massimo di esecuzione è un limite previsto a vari livelli e finalizzato a preservare il buon funzionamento di ogni sistema informatico. Questo limite può essere impostato a livello di rete, di web-server e, con alcuni limiti, può essere personalizzato dagli sviluppatori a livello di singolo script.

Il raggiungimento, senza successo, del tempo massimo di attesa è la causa scatenante dell’errore 504 Gateway timeout.

Diverse diciture per l’errore 504

L’errore 504 non si presenta sempre con lo stesso messaggio.

Esempio di pagina di Errore 504

Differenti server ed anche differenti client, infatti, possono portare alla visualizzazione di una svariata serie di avvisi. Vediamo, di seguito, i più diffusi:

  • Error 504
  • HTTP Error 504
  • HTTP Error 504 – Gateway Timeout
  • 504 Gateway Timeout
  • NGINX 504 Gateway Timeout
  • Gateway Timeout Error
  • 504 Error
  • Gateway Timeout (504)
  • 504 Gateway Time-out – The server didn’t respond in time

In alternativa a questi messaggi è anche possibile che l’errore 504 si presenti, semplicemente, come uno schermo bianco senza nessun testo o avviso.

Le cause dell’errore 504

Le cause dell’errore 504 possono essere molteplici e possono verificarsi a vari livelli, sia a livello di rete che a livello di web-server. Effettuare il debug di un errore 504 non è sempre semplice, per questo motivo è utile conoscere le possibili cause in grado di generarlo in modo da poter effettuare gli opportuni test.

Le cause comuni dell’errore 504 sono differenti a seconda del contesto. Vediamo le situazioni più frequenti.

Problematiche legate a Cloudflare o CDN

Qualora si utilizzi Cloudflare o una CDN (Content Delivery Network) le cause dell’errore 504 potrebbero non essere connesse al nostro sito ne, tantomeno, al nostro hosting. In questo caso, infatti, le cause dell’errore 504 potrebbero essere da ricercare in:

  • problemi legati ai DNS;
  • problemi di Rete;
  • problemi sui server della CDN in uso.

E’ bene ricordare, infatti, che questa tipologia di servizi si frappone tra il client ed il nostro web-server fungendo da "diaframma". Questo tipo di struttura, quindi, può essere soggetta ad errori di tipo 504 quando una problematica di rete (o di DNS) impedisce, ad esempio, al server di Cloudflare o della CDN in uso di contattare l’effettivo web-server su cui sono ospitati i nostri applicativi.

Problematiche legate al nostro web-server

Di frequente le cause dell’errore 504 gateway timeout sono da ricercare internamente, cioè a livello del proprio server o dei propri applicativi. Per farla semplice: l’errore 504 si verifica quando il web-server non è in grado di elaborare la richiesta del client in tempo utile.

Ciò si può verificare per una pluralità di motivi:

  • il web-server è lento o sovraccarico;
  • l’applicativo richiede più risorse (ad es. RAM o CPU) di quelle disponibili nel sistema;
  • l’applicativo non è in grado di accedere a risorse remote indispensabili ai fini dell sua esecuzione (come, ad esempio, file XML o database);
  • l’applicativo effettua interrogazioni complesse al database il quale richiede troppo tempo per fornire i dati in risposta alle query;
  • l’applicativo ha bisogno di più tempo per svolgere tutto il suo lavoro (si pensi, ad esempio, a script che effettuano importazioni di grandi volumi di dati).

Problematiche dovute a Bot o attacchi DoS

Problematiche tipicamente idonee a generare l’errore 504 gateway timeout sono l’eccessiva presenza di Bot oppure attacchi di tipo DoS o DDoS. La conseguenza di entrambe le eventualità è la medesima: il web-server viene sovraccaricato di richieste e non è più in grado di svolgere i suoi compiti nei tempi previsti.

Come risolvere l’errore 504?

La risoluzione di un errore 504 potrebbe rivelarsi particolarmente ostica e complessa in quanto non si tratta di identificare un errore di programmazione ma, cosa ben più complessa, identificare la causa di un rallentamento (che non necessariamente è dovuto a "cattiva programmazione").

Vediamo, di seguito, uno schema di intervento che potrebbe rivelarsi efficace per la risoluzione dell’errore 504.

  1. Se si utilizza una CDN potrebbe essere utile disattivarla temporaneamente.
  2. Se si utilizza Cloudflare, purtroppo, non esiste un modo veloce per disattivarlo (Cloudflare è un servizio fully proxy) ma esiste, tuttavia, un modo semplice per capire a che livello si verifica il problema: il "trucco" consiste nel prestare attenzione alla schermata di errore…
Guida completa all'errore 504 Gateway timeout
  1. Una volta escluso che la causa sia nelle eventuali CDN o in Cloudflare, bisognerà indagare a livello del nostro hosting e dei nostri applicativi. La prima cosa da fare è dare un’occhiata ai log per identificare eventuali anomalie negli accessi: per farlo potrebbe essere utile utilizzare dei log analyzer come AWStats per controllare che non ci siano dei flussi "strani" di traffico provenienti da paesi esteri o da user agent sospetti. Se così fosse ci si potrebbe trovare di fronte ad un problema legato ad attacchi DoS (nel qual caso sarà necessario informare il proprio hosting provider) o ad un afflusso massivo di Bot (in tal caso suggerisco la lettura di questo articolo dedicato alle contromisure per far fronte ai Bad Bots).
  2. Escluso anche il sovraccarico dovuto ad anomalie nel traffico non resterà che indagare all’interno dei propri applicativi ed, eventualmente, delle configurazioni del web-server.

Identificare problematiche legate agli applicativi ed ai loro tempi di esecuzione

La prima cosa da fare, per indagare in questa direzione, è visualizzare il log degli eventuali errori. All’interno dell’error log, infatti, potrebbe essere possibile trovare spunti di indagine dai quali partire. Evetuali errori di programmazione, infatti, potrebbero essere la causa – diretta o indiretta – degli errori 504.

Se si ha accesso alla configurazione del web server è anche possibile integrare dei sistemi di logging appositi per identificare gli script "lenti". Se si utilizza PHP-FPM, ad esempio, è possibile intervenire nella configurazione decommentando le direttive slowlog e request_slowlog_timeout:

; The log file for slow requests
; Default Value: not set
; Note: slowlog is mandatory if request_slowlog_timeout is set
;slowlog = log/$pool.log.slow

; The timeout for serving a single request after which a PHP backtrace will be
; dumped to the 'slowlog' file. A value of '0s' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_slowlog_timeout = 0

In Apache è possibile utilizzaremod_log_config per impostare dei log personalizzati con cui traccaire i tempi di esecuzione degli script. Ad esempio è possibile definire un log personalizzato aggiungendo questa linea al file http.conf:

LogFormat ""%r" %D" measure-time

All’interno del VirtualHost sarà invece necessario aggiungere un’istruzione del genere:

CustomLog logs/access_log_time measure-time

Così facendo avremo a disposizione un potente strumento per identificare gli script che generano o potrebbero generare errori di tipo 504.

Risolvere i problemi di lentezza degli applicativi che causano l’errore 504

Una volta identificato gli script colpevoli dell’insorgere di Errori 504 bisognerà capire quali operazioni essi svolgono. Molto probabilmente la causa della lentezza è da cercarsi in relazione all’interfacciamento con un database. Se la connessione con il database remoto è troppo lenta è necessario rivolgersi al proprio hosting provider, se la connessione è veloce ma i tempi di risposta del DBMS sono lunghi, invece, l’errore 504 potrebbe essere dovuto ad un numero eccessivo di interrogazioni o a delle cosiddette slow query (col termine "slow query" si identificano quelle interrogazioni, complesse ed articolate, che, in quanto tali, richiedono parecchio tempo per generare un result set).

In presenza di queste problematiche potrebbe essere utile valutare un upgrade del proprio piano di hosting (o del database se acquistato come servizio separato) o, in alternativa, rivolgersi allo sviluppatore dello script al fine di chiederne un’ottimizzazione.

Risolvere l’errore 504 in WordPress

Se l’errore 504 Gateway timeout si verifica in un sito realizzato con WordPress la prima cosa da fare consiste, certamente, nell’attivare la modalità di debug. Per farlo si agisca all’interno del file wp-config.php aggiungendo (o modificando) le seguenti istruzioni:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Se non si riesce ad identificare l’errore potrebbe essere utile disabilitare tutti i plugin e riattivarli uno per volta effettuando un test dopo ogni attivazione di plugin. Una volta identificato il plugin "colpevole" sarà possibile decidere se rinunicare al plugin, cercarne degli alternativi oppure contattarne lo sviluppatore per chiedere assistenza.

Potrebbe essere utile, al fine di "risparmiare" preziose risorse di sistema, disattivare tutti i servizi non essenziali (come l’heartbeat, XMLRPC, pingbak e trackback, il cron, ecc.).

Se tutti gli interventi non portano ai risultati sperati potrebbe essere necessario valutare un upgrade del proprio piano hosting e/o delle risorse del proprio server in quanto, probabilmente, il problema è legato ad un afflusso di traffico troppo consistente per le risorse disponibili.

Risolvere l’errore 504 aumentando il tempo massimo di esecuzione

Una soluzione all’errore 504 potrebbe essere quella di aumentare il tempo massimo di esecuzione degli script. E’ evidente che questa soluzione può essere perseguita solo in casi eccezionali: ogni applicativo on-line dovrebbe essere veloce e rispondere in tempi ragionevoli, pertanto l’innalzamento di questi tempi è praticabile solo in presenza di script particolarmente complessi ed in situazioni in cui tempi di attesa molto lunghi possano essere accettabili dall’utente finale (è il caso, ad esempio, di uno script di manutenzione o di importazione dati).

Per quanto riguarda gli applicativi in PHP, il tempo massimo di esecuzione è fissato, di default, in 30 secondi. Quando lo script non riesce a concludersi entro questo range di tempo, il server restituirà l’errore 504 al client.

Questo limite è modificabile agendo sulla direttiva max_execution_time del file php.ini. Ad esempio supponiamo di voler impostare il tempo massimo in un minuto:

max_execution_time = 60

Anche gli sviluppatori possono, se necessario, agire sul tempo massimo di esecuzione direttamente all’interno del sorgente dei loro script. Per farlo è sufficiente inserire, all’inizio del codice, questa istruzione:

ini_set('max_execution_time', 60); // 60 secondi

Conclusioni

La risoluzione delle problematiche connesse all’errore 504 appare piuttosto complessa in quanto richiede valutazioni e verifiche a più livelli. L’upgrade del servizio di hosting può essere la soluzione al problema quando l’errore è determinato da un deterioramento delle prestazioni del web-server a causa di un eccessivo afflusso di traffico o dalla scarsità di risorse computazionali o di memoria. In tutte le altre circostanze è preferibile un’attenta e scrupolosa indagine al fine di identificare le cause del problema ed adottare le giuste contromisure.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

ERR_TOO_MANY_REDIRECTS: cos’è e come risolvere l’errore

L'errore ERR_TOO_MANY_REDIRECTS si verifica quando un browser tenta di...

Lucchetto HTTPS barrato di rosso: cosa significa e come risolvere

Il lucchetto HTTPS barrato di rosso mostrato dal browser...

Risolvere l’errore Bad Request … Size of a request header field exceeds server limit

L'errore "Bad Request: Your browser sent a request that...

NGinx: cos’è, come funziona e perché conviene usarlo

Prima di parlare di NGinx, delle sue caratteristiche e...

Errore 410: cos’è, quando si verifica e come risolvere (se necessario)

Il codice di stato HTTP 410 (o “Gone”), più...

Errore 451 Unavailable For Legal Reasons: cos’è e quando si verifica

L'errore HTTP 451 Unavailable For Legal Reasons รจ un...
Pubblicitร