Torna al blog

Come risolvere un servizio PHP-FPM bloccato su Ubuntu (502 Bad Gateway)

2025-09-156 min read

Il tuo sito Nginx è offline con un 502 Bad Gateway. Riavvi PHP-FPM e ottieni un errore come Job for php8.3-fpm.service failed.... Ecco il modo rapido e affidabile per risolverlo.

1) Trova il vero problema

Quando systemctl mostra un errore come status=78, spesso indica una configurazione errata. Inizia testando la configurazione:

sudo php-fpm8.3 -t

Se questo comando viene eseguito correttamente ma il servizio non si avvia ancora, controlla i log completi del servizio:

sudo journalctl -xeu php8.3-fpm.service

Cerca una riga ERROR simile a:

ERROR: Another FPM instance seems to already listen on /var/run/php/your-socket-name.sock

Ciò significa che un processo PHP-FPM vecchio/bloccato è ancora collegato al socket, impedendo l'avvio della nuova istanza.

2) La soluzione: elimina il vecchio processo

Nei comandi seguenti, sostituisci /var/run/php/your-socket-name.sock con il percorso effettivo del socket dal tuo log degli errori.

  1. Trova il processo bloccato (PID)

    sudo lsof /var/run/php/your-socket-name.sock

    Questo comando stampa il processo che detiene il socket (probabilmente in esecuzione come root). Annota il suo PID.

  2. Interrompi quel processo

    # Sostituisci 12345 con il PID effettivo
    sudo kill 12345

    Se non si arresta dopo qualche secondo, puoi forzarne l'interruzione (usare con cautela):

    sudo kill -9 12345
  3. Rimuovi il file socket obsoleto

    sudo rm /var/run/php/your-socket-name.sock

    PHP-FPM lo ricreerà all'avvio.

  4. Avvia PHP-FPM

    sudo systemctl start php8.3-fpm

    Il tuo servizio dovrebbe ora avviarsi correttamente. Verifica lo stato:

    systemctl status php8.3-fpm

3) Perché succede

Se PHP-FPM si arresta in modo anomalo o viene interrotto inaspettatamente, può lasciare un processo figlio in esecuzione o un socket obsoleto. Systemd tenta di avviare un nuovo processo master, ma il socket è già occupato.

4) Prevenire la prossima volta

  • Riavvii graziosi: Preferisci systemctl reload php8.3-fpm per le modifiche alla configurazione.
  • Monitora i log: Tieni d'occhio /var/log/php8.3-fpm.log (o il percorso della tua distribuzione) per eventuali crash.
  • Socket vs. porta: Se continui a riscontrare conflitti di socket, considera temporaneamente l'uso di TCP (127.0.0.1:9000) mentre esegui il debug.

Checklist rapida copia-incolla

# 1) Verifica la configurazione
sudo php-fpm8.3 -t

# 2) Ispeziona i log del servizio
sudo journalctl -xeu php8.3-fpm.service

# 3) Se l'errore "already listen" -> libera il socket
sudo lsof /var/run/php/your-socket-name.sock
sudo kill <PID>
sudo rm /var/run/php/your-socket-name.sock

# 4) Avvia il servizio
sudo systemctl start php8.3-fpm

# 5) Verifica
systemctl status php8.3-fpm