Gran parte del tempo perso dietro a un guasto se ne va leggendo il registro sbagliato. Ognuno risponde a una domanda diversa, e scegliere per primo il file giusto rende quasi sempre rapido tutto il resto.

  • /var/log/nginx/error.log — il server web non è riuscito a fare il suo lavoro: rifiuto a monte, permesso negato, file non trovato.
  • /var/log/nginx/access.log — cosa è stato chiesto e cosa è stato restituito. È qui che trovi il QUANDO.
  • /var/log/php8.3-fpm.log — processi che muoiono, problemi di pool.
  • il registro dell'applicazione — il tuo codice. La traccia di esecuzione abita qui e in nessun altro posto.

Guardalo mentre riproduci il guasto

tail -f /var/log/nginx/error.log

Lascialo in esecuzione, carica la pagina rotta e leggi cosa compare. È il passo di diagnosi più efficace che esista, e costa dieci secondi.

Trova la forma del problema

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
grep ' 500 ' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head

Il primo mostra la distribuzione dei codici di stato. Il secondo nomina gli indirizzi che falliscono, ordinati per frequenza — e di solito un solo indirizzo ne rappresenta la maggior parte.

Restringi per orario

sed -n '/04\/Sep\/2026:14:0/,/04\/Sep\/2026:14:2/p' access.log | grep ' 50'

Quella che conta è la prima occorrenza

Leggi il PRIMO errore di una raffica, non l'ultimo. I successivi sono di solito conseguenze — una coda che si accumula, un pool di connessioni che si esaurisce — e correggere una conseguenza non cambia nulla.
Se il registro è vuoto mentre qualcosa è chiaramente fallito, la richiesta non ha mai raggiunto quello strato. Spostati di uno strato verso l'esterno: nessun errore PHP significa che l'ha rifiutata Nginx; nessuna riga in Nginx significa che non è mai arrivata.