Halaman kesalahan fallback lokal Nginx jika tujuan proxy tidak tersedia

9

Saya meneruskan permintaan ke layanan lokal melalui server Nginx. Apa yang saya coba capai sekarang adalah mundur ke halaman kesalahan lokal jika layanan tidak tersedia.

Konfigurasi saya saat ini adalah

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

Proxy berfungsi, tetapi segera setelah saya membuat layanan saya di 9080 tidak tersedia index.html dari lokasi pemeliharaan saya TIDAK ditampilkan.

Ada saran tentang apa yang salah dengan konfigurasi ini?

Dennis Winter
sumber

Jawaban:

12

Sebenarnya, saya hanya perlu sedikit memodifikasi konfigurasi Anda:

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

dan jelas mengganti nama yang index.htmlingin Anda presentasikan 500.html.

gila
sumber
1
Menggunakan pendekatan ini, apa yang terjadi ketika aplikasi yang berjalan di proxy_pass melempar 501, 502, atau 503? Beberapa aplikasi (seperti Django) menangani kesalahan 50x mereka sendiri sehingga mereka dapat memiliki halaman kesalahan khusus. Akankah pendekatan di sini mengalahkan aplikasi yang menghasilkan halaman kesalahan 50x dengan halaman Nginx 500.html?
Joe J
Saya belum mengujinya, tapi saya yakin 99%, bahwa kesalahan-kesalahan itu akan menampilkan /500.html. Idenya adalah, bahwa ketika nginx mendapatkan 501 502 503 dari server proksi, itu akan menampilkan /500.html. Server proksi menjadi django.
kacang
1

Coba tentukan url yang tepat untuk halaman kesalahan seperti:

    proxy_intercept_errors on;
    error_page  500 502 503 504 402 403 401  /500.html;
    root   /locust/www/fallback/htdocs;
Andrei Mikhaltsov
sumber
Nggak. :( Saya mencoba perubahan konfigurasi Anda di kedua lokasi tetapi tidak berhasil.
Dennis Winter