Soluzione all'errore 502 Bad Gateway e 504 Gateway Timeout Error sul server Linux
Una guida passo passo per risolvere i problemi di Nginx, Apache, PHP-FPM e timeout del servizio.
visto sui siti web errore di connessione 502 Bad Gateway E 504 Timeout del gateway gli errori in genere si verificano perché il server Web non riceve la risposta corretta dal servizio back-end. Questo servizio può essere PHP-FPM, backend Apache, applicazione Node.js, servizio API del pannello di gioco o un'altra applicazione dietro il proxy.
Questi errori sono particolarmente comuni nell'hosting, nel pannello di gioco, in WHMCS, Pterodactyl, nel pannello di amministrazione personalizzato e nei sistemi di avvio basati sul web.
1. Differenza tra errore 502 e 504
- errore di connessione 502 Bad Gateway: Il server Web non riesce a connettersi al servizio backend o riceve una risposta confusa.
- 504 Timeout gateway: Il servizio di backend sembra rispondere, ma la risposta non viene restituita in tempo.
Quindi 502 è più un arresto anomalo della connessione/servizio e 504 è un problema di lentezza o timeout.
2. Controllo degli stati del servizio
Innanzitutto, controlla se il server web e i servizi PHP sono in esecuzione.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
Sui sistemi CentOS, AlmaLinux o Rocky Linux, il servizio PHP-FPM può essere denominato:
systemctl status php-fpm systemctl status httpd
Se il servizio è stato interrotto, riavvialo:
systemctl restart nginx systemctl restart php-fpm
3. Revisione dei file di registro
Non è corretto procedere con supposizioni per gli errori 502 e 504. Il file di registro mostra la vera causa dell'errore.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
Sui sistemi basati su CentOS:
tail -n 100 /var/log/httpd/error_log
Nei log si possono vedere le seguenti dichiarazioni:
- connect() non è riuscito: Impossibile connettersi al servizio backend.
- timeout a monte: Il servizio backend risponde in ritardo.
- Connessione rifiutata: Il servizio è inattivo o è stato effettuato l'inoltro alla porta sbagliata.
- permesso negato: Si è verificato un problema con i permessi del socket o del file.
4. Socket PHP-FPM o controllo della porta
Nginx si connette a PHP-FPM tramite socket o porta. Il percorso PHP-FPM nel file di configurazione Nginx e il valore di ascolto PHP-FPM effettivo devono essere gli stessi.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Ad esempio se Nginx utilizza:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
Lo stesso socket dovrebbe essere ascoltato sul lato PHP-FPM:
listen = /run/php/php8.2-fpm.sock
5. Aumento delle impostazioni di timeout
Gli errori 504 possono essere ricevuti in pannelli di elaborazione di grandi dimensioni, mercati di gioco, API o script PHP a esecuzione lenta. I valori di timeout di Nginx possono essere aumentati.
nano /etc/nginx/nginx.conf
Al blocco http o al relativo blocco server possono essere aggiunti i seguenti valori:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Testa le impostazioni e riavvia Nginx:
nginx -t systemctl restart nginx
6. Verifica dei limiti del processo PHP-FPM
Quando il traffico aumenta, i limiti delle transazioni PHP-FPM potrebbero essere insufficienti. In questo caso, le richieste vengono accodate e si verifica un timeout.
nano /etc/php/8.2/fpm/pool.d/www.conf
Impostazioni di esempio:
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Questi valori dovrebbero essere adeguati in base alla quantità di RAM del server. L'impostazione di un valore troppo alto aumenta il consumo di RAM.
Errori comuni
- Modifica delle impostazioni senza consultare il file di registro
- Non aggiorna il percorso del socket Nginx anche se la versione di PHP è cambiata
- Non correggere la query lenta effettiva aumentando il timeout
- Aumento dei limiti PHP-FPM senza calcolare la RAM
- Riavvio del servizio senza testare la configurazione di Nginx
Domande frequenti
L'errore 502 è sempre causato da Nginx?
No. Nginx è solo quello che mostra l'errore. Il vero problema potrebbe risiedere in PHP-FPM, nel backend Apache, nell'applicazione Node.js o in un altro servizio.
Aumentare il timeout è la soluzione definitiva per gli errori 504?
Non sempre. L’aumento del timeout fornisce un sollievo temporaneo. La vera soluzione è trovare la query lenta, l'elaborazione pesante o il problema delle prestazioni.
È sicuro riavviare PHP-FPM?
In genere è sicuro, ma le richieste attive potrebbero risentirne per un breve periodo. Nei sistemi molto trafficati si dovrebbero preferire gli orari a basso traffico.
Raccomandazioni sulle prestazioni
- Controlla regolarmente la versione di PHP-FPM e il percorso del socket.
- Esaminare i log delle query lente nel pannello Web e nei servizi API.
- Se la RAM è insufficiente, non aumentare inconsciamente il valore PHP-FPM max_children.
- Riduci il carico del backend utilizzando un sistema di cache.
- Gestisci i log degli errori prima che crescano con logrotate.
Questo articolo è stato preparato appositamente per PvPServer.