Nginx zwraca 502 podczas restartowania backendu. Jak sprawić, by serwer proxy Nginx spróbował ponownie N razy z opóźnieniem M sekund? Czy jest wtyczka lub coś innego?
Nginx zwraca 502 podczas restartowania backendu. Jak sprawić, by serwer proxy Nginx spróbował ponownie N razy z opóźnieniem M sekund? Czy jest wtyczka lub coś innego?
Odpowiedzi:
Odkryłem, że Nginx potrzebował ~ 2 sekund na wyczerpanie prób, jeśli podałeś setki instancji tego samego backendu:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... er, powtórz w razie potrzeby!)
Tak, przerażająca kludge - ale to dodaje pewnej wytrwałości ...
Co gorsza, możesz użyć:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Zakładając, że Nginx działa na porcie 80, próbowałoby to w sposób ciągły zapętlić żądanie wokół Nginx, dopóki localhost: 8080 nie odpowie. Tzn. Ponów próbę nieskończoną (?) Liczbę razy z zerowym opóźnieniem.
Wrócę teraz do mojej wyściełanej celi ...
Jeśli twoja instalacja nginx obsługuje Lua, możesz zatrzymać klienta przez pewien czas dzięki metodzie uśpienia. Operacja nie blokuje i nie blokuje pracownika. Należy pamiętać, że użytkownik nie może być trzymany w nieskończoność, ponieważ niektóre inne limity czasu związane z gniazdem / zaporą sieciową mogą w końcu wystąpić.
server {
listen 8502;
location / {
#25 seconds sleep
content_by_lua_block {
ngx.sleep(25);
ngx.exit(ngx.HTTP_BAD_GATEWAY);
}
}
}
Następnie na liście nadrzędnej musisz dodać powyższy serwer jako kopię zapasową, aby zatrzymać klienta.
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
}
Powinno to zostać uwzględnione w specyfikacji lokalizacji proxy:
proxy_read_timeout 30; #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
lua
moduł w nginx na Ubuntu 17.04, uruchom:sudo apt-get install libnginx-mod-http-lua
Najbliższa rzecz, jaką znam, to ten projekt , ale nigdy go nie użyłem. Wiem, że lakier ma sprawdzanie backendu, może chcesz na to rzucić okiem.