So sieht die Meldung aus
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"Häufige Ursachen
rootoderaliaszeigt auf das falsche Verzeichnis, oder das Deployment hat die Dateien nicht dort abgelegt.- Einer Anwendung mit schönen URLs (Front-Controller, Single-Page-App) fehlt
try_files ... /index.php?$argsoder/index.html. - Die Anfrage landete im falschen
server-Block (falscherserver_nameoder derdefault_server). - Dateinamen unterscheiden unter Linux Groß- und Kleinschreibung:
Logo.PNGist nichtlogo.png. - Eine
locationmitaliashat einen Schrägstrich-Konflikt, oder eine Regex-Location überschreibt die vorgesehene.
Prüfen
- Der genaue Pfad, den nginx versucht hat
sudo tail -n 20 /var/log/nginx/error.log - Die wirksamen Regeln des Servers
nginx -T 2>/dev/null | grep -nE 'server_name|root |alias |try_files|location ' - Existiert die Datei an diesem Pfad?
ls -l /var/www/example.com/html/about - Welcher Server-Block antwortet für diesen Host? (Antwort prüfen)
curl -sI -H 'Host: example.com' http://127.0.0.1/about | head -n 5
Lösung
- Den Pfad aus dem Error-Log mit dem echten Speicherort vergleichen und
rootoderaliaskorrigieren oder die fehlenden Dateien ausliefern. - Für Front-Controller-Apps
location / { try_files $uri $uri/ /index.php?$args; }nutzen, für Single-Page-Appstry_files $uri /index.html;. server_nameprüfen, damit der Host zum vorgesehenen Block passt, und einen bewusstendefault_serverfestlegen.- Die Schreibweise von Dateinamen oder Links korrigieren und bei
aliasdie Schrägstriche von Location und Alias angleichen. - Testen und anwenden:
nginx -t && systemctl reload nginx.
Häufige Fragen
Wie unterscheidet sich 404 von 403?
404 heißt, nginx fand keine passende Datei. 403 heißt, es fand den Pfad, darf ihn aber nicht lesen oder das Verzeichnis nicht auflisten, also ein Berechtigungs- oder Index-Problem.
Kann eine 404 von der Anwendung kommen und nicht von nginx?
Ja. Antwortet PHP-FPM oder ein Proxy-Backend mit 404, reicht nginx sie nur durch. Im Error-Log steht dann keine open() failed-Zeile, prüfe also das Routing der Anwendung.