Errore 502 Bad Gateway: cause comuni

Cosa indica il 502

L'errore 502 Bad Gateway indica che un server intermedio (tipicamente un reverse proxy o gateway) ha ricevuto una risposta non valida o nessuna risposta dal server upstream a cui ha inoltrato la richiesta. Non significa che il sito sia offline: significa che la catena di server tra l'utente e l'applicazione è spezzata in un punto preciso.

Architettura tipica

In setup moderni la richiesta passa attraverso Cloudflare o un load balancer, arriva a Nginx come reverse proxy e viene inoltrata a PHP-FPM, Node.js o un'application server. Un 502 può originare da uno qualsiasi di questi passaggi. La chiave è identificare quale layer ha fallito.

PHP-FPM crashato

La causa più comune in stack LAMP/LEMP è PHP-FPM che è andato in crash o non risponde. Verifica con systemctl status php8.2-fpm e riavvia se necessario. Controlla i log: tail -f /var/log/php8.2-fpm.log. Errori comuni: pool worker esauriti, memory_limit superato, segfault da estensioni PHP buggate.

Application server down

Per Node.js o Python, l'application server potrebbe essersi fermato. Usa pm2 list o systemctl status del servizio specifico. Riavvia e analizza i log. Strumenti come pm2 o systemd con Restart=always riavviano automaticamente l'applicazione in caso di crash.

Worker insufficienti

Su PHP-FPM, se tutti i worker sono occupati le nuove richieste falliscono con 502. Modifica pm = dynamic, pm.max_children, pm.start_servers in www.conf. Calcola max_children = (RAM disponibile) / (memoria media per processo). Su un server con 4GB e processi da 60MB: circa 60 worker.

Timeout reverse proxy

Se l'applicazione impiega troppo a rispondere, il reverse proxy chiude la connessione restituendo 502. Su Nginx aumenta fastcgi_read_timeout 300; e proxy_read_timeout 300;. Su Apache mod_proxy: ProxyTimeout 300. Identifica però perché l'app è lenta: query database non ottimizzate, API esterne timeout, loop infiniti.

Cloudflare 502

Cloudflare restituisce 502 quando il tuo origin server risponde con risposta malformata. Disabilita temporaneamente Cloudflare (pause site) per verificare se il problema persiste. Se sì, è sul tuo server. Se no, è un'incompatibilità con qualche regola Cloudflare (Rocket Loader, Brotli, HTTP/3).

Memoria insufficiente

OOM Killer (Out Of Memory) di Linux uccide processi quando la RAM finisce. Controlla con dmesg | grep -i kill se PHP-FPM o Apache sono stati uccisi. Aumenta la RAM del server, riduci max_children, ottimizza il codice applicativo per consumare meno memoria per richiesta.

Hai bisogno di aiuto?

Se il tuo sito ha problemi di accesso, il team di G Tech Group può aiutarti. Contattaci tramite il modulo di contatto.

Hai trovato utile quest'articolo?