Sie können eine Seite mit einem Fehlercode mit zurückgeben
error_page 404 /index.html;
Solange root
in Ihrem Serverblock der Standardpfad von nginx definiert ist. Nginx.org verfügt über eine umfassende Dokumentation zu all dem, die es wert ist, überprüft zu werden.
Umschreiben 200
Ist gefährlich. Sie können jedoch verwenden, return
um mit Anfragen an eine andere Stelle auf Ihrem Server zu antworten, wodurch die Anweisung error_page ordnungsgemäß aufgerufen wird. Wenn Sie dies am Ende Ihres Serverblocks einfügen, dient es als Sammelbegriff für Anforderungen, die an keiner anderen Stelle angegeben sind:
location / {
return 404;
}
Hier sind die Dokumente für return
.
Um wirklich pedantisch zu sein, können Sie auch die Anweisung error_page weglassen und stattdessen einfach die Weiterleitungs-URL schreiben (für die Codes 301, 302, 303, 307 und 308 ab Version 0.8.42):
location / {
root /path/to/www/nginx;
return 301 /index.html;
}
Oder der Antworttext (für andere Codes):
location / {
root /path/to/www/nginx;
return 404 '404 error';
}
... aber es kann schwierig sein, Fehler zu beheben, wenn etwas schief geht.
Eine kleine Ausarbeitung
Nginx hat eine ziemlich einfache Syntax zum Trennen zwischen Statuscodes und Seiten. Innerhalb eines server
Blocks können Sie definieren, root
wo nginx nach den angeforderten statischen Seiten sucht. Wenn eine statische Seite angefordert und nicht gefunden wird oder nicht gelesen werden kann oder etwas anderes passiert, erhält nginx einen Statuscode und führt eine Aktion aus. Wenn dieser Code 200 ist, verarbeitet er HTML, PHP oder was auch immer, was eine Reihe von Anforderungen an das Dateisystem oder einen anderen Socket auslösen kann (und dies häufig tut), um diesen oder jenen Teil Ihrer Seite bereitzustellen. Die Ergebnisse bei Erfolg werden an den Browser-Client gesendet, und bei einem Fehler wird die Standardseite für den Fehler zurückgegeben. In beiden Fällen wird auch der Statuscode zurückgegeben (was eine browserbasierte Anpassung von 404 und anderen Fehlern ermöglicht).
Die error_page
Direktive teilt nginx lediglich mit, welcher Anforderung als Nächstes zu folgen ist. In der Praxis muss diese Anforderung nicht einmal eine Datei auf der Festplatte sein. Es kann ein Name location
mit eigenen Regeln sein. Die Standardkonfiguration für nginx veranschaulicht dies recht gut:
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
Beim Abrufen eines 503 fordert nginx /50x.html an, und die location-Anweisung für jede Anforderung an 50x.html definiert den Stammpfad, in dem nach dieser Datei gesucht werden soll.
return 404 /index.html;
tut nicht das, was ich denke du denkst es tut. Es gibt einen 400-Statuscode und den Text "/index.html" zurück (nicht den Inhalt dieser Seite).