nginx stellt keine Fehlerseite in einem Unterverzeichnis des Dokumentstammverzeichnisses bereit

nginx stellt keine Fehlerseite in einem Unterverzeichnis des Dokumentstammverzeichnisses bereit

Hier ist ein Ausschnitt meiner Nginx-Konfiguration:

server {
    error_page 500 /errors/500.html;
}

Wenn ich in meiner Anwendung einen 500-Fehler verursache, zeigt Chrome einfach seine Standard-500-Seite an (Firefox und Safari zeigen eine leere Seite) und nicht meine benutzerdefinierte Fehlerseite.

Ich weiß, dass die Datei existiert, weil ich sie aufrufen http://server/errors/500.htmlund sehen kann. Ich kann die Datei auch in das Dokumentstammverzeichnis verschieben und die Konfiguration folgendermaßen ändern:

server {
    error_page 500 /500.html;
}

und Nginx stellt die Seite korrekt bereit. Es scheint also nicht so, als ob auf dem Server eine andere Fehlkonfiguration vorliegt.

Ich habe auch versucht:

server {
    error_page 500 $document_root/errors/500.html;
}

Und:

server {
    error_page 500 http://$http_host/errors/500.html;
}

Und:

server {
   error_page 500 /500.html;
   location = /500.html {
       root /path/to/errors/;
   }
}

ohne Erfolg.

Ist das das erwartete Verhalten? Müssen Fehlerseiten im Dokumentstamm vorhanden sein oder übersehe ich etwas Offensichtliches?


Aktualisierung 1:Auch dies schlägt fehl:

server {
    error_page 500 /foo.html;
}

when foo.htmlexistiert tatsächlich im Dokumentstamm. Es scheint fast so, als würde etwas anderes meine Konfiguration überschreiben, aber dieser Block ist die einzige Stelle, /etc/nginx/*die auf die error_pageDirektive verweist.

Gibt es einen anderen Ort, an dem die Nginx-Konfiguration festgelegt werden kann?

Antwort1

Versuchen Sie hinzuzufügen

proxy_intercept_errors on;

oder

fastcgi_intercept_errors on;

im Serverblock, abhängig von Ihrer Konfiguration.

Diese Art von Konfiguration funktioniert einwandfrei:

  error_page   500 502 503 504  /500.html;
    location = /500.html {
        root   /home/static/pages;
    }

Antwort2

Versuche dies:

Server { Fehlerseite 500 =200 /errors/500.html; }

Dies sollte den HTTP-Status 200 senden, damit der Browser Ihre Seite anzeigt. Mit dem Standardstatus (500) zeigt der Browser wahrscheinlich seine eigene Fehlerseite an und ignoriert Ihren Inhalt, selbst wenn er vom Server gesendet wird.

Grüße, Adam

verwandte Informationen