Come appare il messaggio
2026/10/29 09:41:03 [error] 1234#1234: *7788 open() "/var/www/example.com/html/about" failed (2: No such file or directory), client: 203.0.113.5, server: example.com, request: "GET /about HTTP/2.0", host: "example.com"Cause frequenti
rootoaliaspunta alla directory sbagliata, oppure il deploy non ha messo lì i file.- A un'applicazione con URL puliti (front controller, single-page app) manca
try_files ... /index.php?$argso/index.html. - La richiesta è finita nel blocco
serversbagliato (server_nameerrato o ildefault_server). - I nomi dei file distinguono maiuscole e minuscole su Linux:
Logo.PNGnon èlogo.png. - Una
locationconaliasha uno slash non coerente, oppure una location con regex sovrascrive quella prevista.
Verifica
- Il percorso esatto che nginx ha provato
sudo tail -n 20 /var/log/nginx/error.log - Le regole effettive del server
nginx -T 2>/dev/null | grep -nE 'server_name|root |alias |try_files|location ' - Il file esiste in quel percorso?
ls -l /var/www/example.com/html/about - Quale server block risponde per questo host? (controlla la risposta)
curl -sI -H 'Host: example.com' http://127.0.0.1/about | head -n 5
Soluzione
- Confronta il percorso dell'error log con la posizione reale del file e correggi
rootoalias, oppure distribuisci i file mancanti. - Per le app con front controller usa
location / { try_files $uri $uri/ /index.php?$args; }, per le single-page apptry_files $uri /index.html;. - Controlla
server_nameperché l'host corrisponda al blocco previsto e imposta undefault_servervoluto. - Correggi le maiuscole nei nomi dei file o nei link e con
aliasallinea gli slash di location e alias. - Testa e applica:
nginx -t && systemctl reload nginx.
Domande frequenti
In cosa differisce 404 da 403?
404 significa che nginx non ha trovato un file corrispondente. 403 significa che ha trovato il percorso ma non può leggerlo o non può elencare la directory, quindi un problema di permessi o di index.
Un 404 può arrivare dall'applicazione e non da nginx?
Sì. Se PHP-FPM o un backend proxy risponde 404, nginx lo inoltra soltanto. Nell'error log allora non c'è la riga open() failed, quindi controlla il routing dell'applicazione.