So sieht die Meldung aus
directory index of "/var/www/site/" is forbidden, client: 198.51.100.7, server: example.com, request: "GET / HTTP/1.1"Häufige Ursachen
- Im Verzeichnis fehlt die Index-Datei und
autoindexist aus („directory index … is forbidden“). indexenthält keinindex.php, obwohl die Anwendung PHP nutzt.- Dem nginx-Benutzer fehlt das Ausführungsrecht (x) auf einem übergeordneten Verzeichnis oder das Leserecht auf der Datei („13: Permission denied“).
deny- oderallow-Regeln sperren die Client-IP („access forbidden by rule“).- SELinux-Kontext falsch, z. B. nach
mvaus dem Home-Verzeichnis.
Prüfen
- Genauen Grund im error.log finden
tail -n 30 /var/log/nginx/error.log | grep -E 'forbidden|Permission denied|access forbidden' - Rechte entlang des gesamten Pfads anzeigen
namei -l /var/www/site/index.html - Als nginx-Benutzer testen, ob die Datei lesbar ist
sudo -u www-data cat /var/www/site/index.html >/dev/null && echo ok - root, index und Zugriffsregeln in der aktiven Konfiguration anzeigen
nginx -T 2>/dev/null | grep -nE '^\s*(root|index|autoindex|deny|allow|auth_basic) '
Lösung
- Index-Datei anlegen oder
index index.php index.html;im server-Block setzen. - Verzeichnisse mit 755, Dateien mit 644 und dem richtigen Besitzer versehen; jedes Elternverzeichnis braucht x für den nginx-Benutzer.
- Bei SELinux den Kontext zurücksetzen:
restorecon -Rv /var/www/site. - deny/allow-Regeln prüfen, besonders in
location-Blöcken, die mehrere Pfade treffen. - Nach Änderungen
nginx -t && systemctl reload nginx.
Häufige Fragen
Was ist der Unterschied zwischen 401 und 403?
401 bedeutet: Anmeldung fehlt oder ist ungültig, mit Zugangsdaten kann es klappen. 403 bedeutet: Der Server verweigert den Zugriff unabhängig von der Anmeldung.
Soll ich autoindex einschalten, damit der 403 verschwindet?
Nur wenn Sie bewusst eine Dateiliste zeigen wollen. Sonst legen Sie eine Index-Datei an – autoindex legt sonst alle Dateien im Verzeichnis offen.