Come appare il messaggio
directory index of "/var/www/site/" is forbidden, client: 198.51.100.7, server: example.com, request: "GET / HTTP/1.1"Cause frequenti
- Nella directory manca il file index e
autoindexè spento (“directory index … is forbidden”). indexnon contieneindex.phpanche se l'app è in PHP.- All'utente di nginx manca il permesso x su una directory superiore o la lettura sul file (“13: Permission denied”).
- Regole
denyoallowbloccano l'IP del client (“access forbidden by rule”). - Contesto SELinux errato, ad es. dopo un
mvdalla home.
Verifica
- Trova il motivo esatto nell'error.log
tail -n 30 /var/log/nginx/error.log | grep -E 'forbidden|Permission denied|access forbidden' - Mostra i permessi lungo tutto il percorso
namei -l /var/www/site/index.html - Prova come utente nginx se il file è leggibile
sudo -u www-data cat /var/www/site/index.html >/dev/null && echo ok - Mostra root, index e regole di accesso nella config attiva
nginx -T 2>/dev/null | grep -nE '^\s*(root|index|autoindex|deny|allow|auth_basic) '
Soluzione
- Crea un file index o imposta
index index.php index.html;nel blocco server. - Directory a 755, file a 644 e proprietario corretto; ogni directory superiore deve avere x per l'utente di nginx.
- Con SELinux ripristina il contesto:
restorecon -Rv /var/www/site. - Controlla le regole deny/allow, soprattutto nei blocchi
locationche coprono più percorsi. - Dopo le modifiche
nginx -t && systemctl reload nginx.
Domande frequenti
Che differenza c'è tra 401 e 403?
401 significa autenticazione mancante o non valida: con le credenziali può funzionare. 403 significa che il server nega l'accesso a prescindere dal login.
Accendo autoindex per far sparire il 403?
Solo se vuoi davvero un elenco dei file. Altrimenti crea un file index: autoindex espone ogni file della directory.