Nginx mengembalikan 502 saat backend mulai ulang. Bagaimana saya bisa membuat proxy nginx coba lagi N kali dengan penundaan M detik? Apakah ada plugin atau yang lainnya?
Nginx mengembalikan 502 saat backend mulai ulang. Bagaimana saya bisa membuat proxy nginx coba lagi N kali dengan penundaan M detik? Apakah ada plugin atau yang lainnya?
Jawaban:
Saya menemukan bahwa Nginx membutuhkan waktu ~ 2 detik untuk melelahkan upaya jika Anda menentukan ratusan instance dari backend yang sama:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... eh, ulangi seperlunya!)
Ya, kludge yang menghebohkan - tetapi itu menambah tingkat keuletan ...
Lebih buruk dari itu, Anda bisa menggunakan:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Dengan asumsi Nginx berjalan pada port 80, ini akan mencoba untuk terus loop permintaan di sekitar Nginx sampai localhost: 8080 merespons. Yaitu coba lagi jumlah waktu tak terbatas (?) Dengan penundaan nol detik.
Saya akan kembali ke sel empuk saya sekarang ....
Jika instalasi nginx Anda memiliki dukungan Lua maka Anda dapat bertahan pada klien untuk beberapa waktu dengan metode tidur. Operasi ini tidak menghalangi dan tidak mengunci pekerja. Perlu diingat bahwa pengguna tidak dapat ditahan tanpa batas karena beberapa waktu habis jaringan / firewall terkait lainnya mungkin terjadi pada akhirnya.
server {
listen 8502;
location / {
#25 seconds sleep
content_by_lua_block {
ngx.sleep(25);
ngx.exit(ngx.HTTP_BAD_GATEWAY);
}
}
}
Kemudian dalam daftar hulu Anda, Anda perlu menambahkan server di atas sebagai cadangan untuk menampung klien.
upstream backend {
server 127.0.0.1:3001 fail_timeout=2s; #The backend
server 127.0.0.1:8502 backup; #Lua holding server in the event backend is restarting
}
Dan ini harus dimasukkan dalam spesifikasi lokasi proksi Anda:
proxy_read_timeout 30; #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
lua
modul ke nginx di ubuntu 17.04 jalankan:sudo apt-get install libnginx-mod-http-lua
Hal terdekat yang saya tahu adalah proyek ini , tetapi saya tidak pernah menggunakan. Saya tahu bahwa vernis telah memeriksa backend, mungkin Anda ingin melihatnya.