Lokale Nginx-Fallback-Fehlerseite, wenn das Proxy-Ziel nicht verfügbar ist


8

Ich leite Anfragen über einen Nginx-Server an einen lokalen Dienst weiter. Ich versuche jetzt, auf eine lokale Fehlerseite zurückzugreifen, falls der Dienst nicht mehr verfügbar ist.

Meine aktuelle Konfiguration ist

server {
    listen       80;
    server_name  "";

    location / {
        proxy_pass  http://127.0.0.1:9080;
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
    }

    error_page 501 502 503 @maintenance;
    location @maintenance {
            root   /locust/www/fallback/htdocs;
            index  index.html index.htm;
    }
}

Das Proxying funktioniert, aber sobald ich meinen Dienst auf 9080 nicht mehr verfügbar mache, wird die index.html meines Wartungsorts NICHT angezeigt.

Irgendwelche Vorschläge, was mit dieser Konfiguration nicht stimmt?

Antworten:


12

Eigentlich musste ich deine Konfiguration nur geringfügig ändern:

error_page 501 502 503 /500.html;
location = /500.html {
        root   /locust/www/fallback/htdocs;
}

und benennen index.htmlSie natürlich das um, dem Sie präsentieren möchten 500.html.


1
Was passiert bei diesem Ansatz, wenn die auf dem proxy_pass ausgeführte Anwendung eine 501, 502 oder 503 auslöst? Einige Anwendungen (wie Django) behandeln ihre eigenen 50-fachen Fehler, sodass sie benutzerdefinierte Fehlerseiten haben können. Wird der Ansatz hier die Anwendung übertreffen, die 50x Fehlerseiten mit der Seite Nginx 500.html generiert hat?
Joe J

Ich habe es nicht getestet, bin mir aber zu 99% sicher, dass genau diese Fehler die Datei /500.html anzeigen. Die Idee ist, dass wenn nginx 501 502 503 vom Proxyserver erhält, /500.html angezeigt wird. Der Proxy-Server ist Django.
Nüsse

1

Versuchen Sie, die genaue URL für die Fehlerseite wie folgt anzugeben:

    proxy_intercept_errors on;
    error_page  500 502 503 504 402 403 401  /500.html;
    root   /locust/www/fallback/htdocs;

Nee. :( Ich habe versucht, Ihre Konfiguration an beiden Standorten zu ändern, aber kein Erfolg.
Dennis Winter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.