
Umfeld:Nginx, Node.js
Ich experimentiere mit der Fehlerbehandlung in Nginx und habe kein Glück beim Zurückgeben von Dateien.
Im vereinfachten Beispiel ngxinx.conf
unten, wenn das http request_method
nicht der Fall ist GET
, HEAD
oder POST
ich möchte, dass der Server die Fehlerseite 405.html zurückgibt.
Erhoffte Ausgabe:405.html wird an den Browser gesendet.
Tatsächliche Ausgabe:Dieser Klartext wird an den Browser gesendet. http://www.example.com/html/405.html
Hinweis: Ich teste dies in Postman, damit ich in Chrome keine zusätzliche Erweiterung installieren muss, die das Senden verschiedener HTTP-Methoden an den Server ermöglicht.
Relevante Teile meiner Konfiguration:
server {
include conf.d/listen-80;
server_name example.com www.example.com;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
return 301 https://www.example.com$request_uri;
}
server {
include conf.d/listen-443;
server_name example.com;
include conf.d/letsencrypt;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
return 301 https://www.example.com$request_uri;
}
server {
include conf.d/listen-443;
server_name www.example.com;
include conf.d/letsencrypt;
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405 $scheme://www.example.com/html/405.html;
}
root /srv/example/views/public;
location ~* \.(htm|html)$ {
include conf.d/content-security-policy-html-rendered;
include conf.d/cache-control-30-days;
include conf.d/security-headers-html-rendered;
}
}
Antwort1
Die folgende URL return nnn
wird nur als Ziel-URL für Umleitungscodes (Statuscodes 301, 302, 303, 307 und 308) behandelt. Aus der Dokumentation geht nicht klar hervor, was sie tut, wenn der Code etwas anderes ist.
Um in Ihrem Fall eine Fehlerseite zu erhalten, verwenden Sie Folgendes:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
error_page 405 /html/405.html;
Dadurch wird nginx angewiesen, zu senden, /html/405.html
wenn der Statuscode 405 zurückgegeben wird.