Si verifica un errore di timeout del gateway 504 quando Nginx non può ricevere una risposta dal servizio per un periodo sufficientemente lungo. Ad esempio da PHP-FPM.
Nginx e PHP-FPM
La causa più comune di questo errore è la collaborazione di Nginx e PHP-FPM. Nel caso in cui ci siano script PHP molto lenti, Nginx darà un timeout del gateway 504 quando non attende una risposta per 30 secondi (per impostazione predefinita).
Per eliminare questo errore, prova ad aumentare il timeout:
location ~ \.php$ { 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 300; }
Delega
Il timeout del gateway 504 può verificarsi anche quando Nginx viene utilizzato come server proxy. Ad esempio, quando si lavora con Apache. Per evitare problemi, è necessario configurare le impostazioni di timeout per il proxy:
server { ... proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; ... }
Non dimenticare di riavviare Nginx dopo aver modificato le impostazioni:
# nginx -s reload
È importante capire che è altamente consigliabile eliminare gli script lenti. Una soluzione con impostazioni di timeout potrebbe smettere di funzionare quando il carico aumenta.