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.