
Ich versuche, einen Fallback für meine Fehlerseite zu erstellen. Im Grunde sollte die Logik etwa wie folgt aussehen:
- foobar.html laden
- existiert nicht auf dem Remote-Server -> lade 404.html vom Remote-Server, um die 404-Seite anzuzeigen
- existiert nicht auf dem Remote-Server -> 404.html im lokalen Dateisystem laden
Das Laden beider localhost/404.html
funktioniert localhost/global404.html
, aber wenn ich es abbreche localhost/404.html
(indem ich die Datei vom HTTP-Server entferne), wird die global404.html
Seite nicht wie erwartet angezeigt.
server {
listen 80;
server_name example.com www.example.com;
proxy_intercept_errors on;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
error_page 404 /404.html;
}
location /404.html {
proxy_pass http://localhost:3000/404.html;
error_page 404 /global404.html;
}
location /global404.html {
root /usr/share/nginx/html;
}
}
Das oben genannte funktioniert einwandfrei, wenn ich darauf klicke http://localhost/404.html
(wenn sich die Datei 404.html auf dem Remote-Server befindet, wird dies angezeigt; wenn ich die Datei lösche, wird die Datei global404.html geladen).
Wenn ich jedoch eine nicht vorhandene Seite eingebe, erhalte ich nur die Standard-404-Seite von Nginx.
Antwort1
Dank der Formulierung eines Kommentars zu der Frage konnte ich die recursive_error_pages
Option finden, die Kaskadierung/Rekursion ermöglicht error_pages
. Ich fühle mich dumm, weil ich sie in der Dokumentation übersehen habe.
Aber einfach tun
server {
listen 80;
server_name example.com www.example.com;
proxy_intercept_errors on;
recursive_error_pages on;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
error_page 404 /404.html;
}
location /404.html {
proxy_pass http://localhost:3000/404.html;
error_page 404 /global404.html;
}
location /global404.html {
root /usr/share/nginx/html;
}
}
hat wunderbar geklappt. Ich liebe Nginx.