Pagina di errore di fallback locale di Nginx se la destinazione proxy non è disponibile


9

Sto inoltrando richieste a un servizio locale tramite un server Nginx. Quello che provo ora a realizzare è il fallback a una pagina di errore locale nel caso in cui il servizio non sia disponibile.

La mia configurazione attuale è

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;
    }
}

Il proxy funziona, ma non appena rendo il mio servizio su 9080 non disponibile, index.html della mia posizione di manutenzione NON viene visualizzato.

Qualche suggerimento su cosa c'è di sbagliato in questa configurazione?

Risposte:


12

In realtà, ho solo dovuto modificare leggermente la tua configurazione:

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

e ovviamente rinominare il che index.htmlsi desidera presentare 500.html.


1
Utilizzando questo approccio, cosa succede quando l'applicazione in esecuzione su proxy_pass genera 501, 502 o 503? Alcune applicazioni (come Django) gestiscono i propri errori 50x in modo da poter avere pagine di errore personalizzate. L'approccio qui vincerà le pagine di errore generate 50x con la pagina Nginx 500.html?
Joe J,

Non l'ho provato, ma sono sicuro al 99% che esattamente quegli errori visualizzeranno il /500.html. L'idea è che quando nginx ottiene 501 502 503 dal server proxy, verrà visualizzato /500.html. Il server proxy è django.
Noci

1

Prova a specificare l'URL esatto per la pagina di errore come:

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

No. :( Ho provato le tue modifiche alla configurazione in entrambe le posizioni, ma senza successo.
Dennis Winter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.