Réponses:
J'ai trouvé que Nginx prenait ~ 2 secondes pour épuiser les tentatives si vous spécifiez des centaines d'instances du même backend:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... euh, répétez au besoin!)
Oui, une horrible culpabilité - mais cela ajoute un certain degré de ténacité ...
Pire encore, vous pouvez utiliser:
server localhost:8080 max_fails=0;
server localhost:80 backup;
En supposant que Nginx s'exécute sur le port 80, cela tenterait de boucler continuellement la demande autour de Nginx jusqu'à ce que localhost: 8080 réponde. C'est-à-dire réessayer un nombre infini (?) De fois avec un retard de zéro seconde.
Je vais retourner dans ma cellule rembourrée maintenant ....
Si votre installation nginx prend en charge Lua, vous pouvez conserver le client pendant un certain temps avec la méthode sleep. L'opération n'est pas bloquante et ne verrouille pas le travailleur. Gardez à l'esprit que l'utilisateur ne peut pas être maintenu indéfiniment car certains autres délais d'attente de socket / pare-feu liés au réseau peuvent se produire finalement.
server {
listen 8502;
location / {
#25 seconds sleep
content_by_lua_block {
ngx.sleep(25);
ngx.exit(ngx.HTTP_BAD_GATEWAY);
}
}
}
Ensuite, dans votre liste en amont, vous devez ajouter le serveur ci-dessus comme sauvegarde pour contenir un client.
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
}
Et cela devrait être inclus dans votre spécification d'emplacement proxy:
proxy_read_timeout 30; #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
lua
module sur nginx sur ubuntu 17.04, exécutez:sudo apt-get install libnginx-mod-http-lua