Risposte:
Ho scoperto che Nginx impiegava ~ 2 secondi per esaurire i tentativi se hai specificato centinaia di istanze dello stesso 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;
(.... ehm, ripeti quanto basta!)
Sì, un orribile kludge - ma aggiunge un certo grado di tenacia ...
Ancora peggio, potresti usare:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Supponendo che Nginx sia in esecuzione sulla porta 80, questo proverebbe a eseguire il ciclo continuo della richiesta attorno a Nginx fino a quando localhost: 8080 risponde. Vale a dire riprovare un numero infinito (?) Di volte con zero secondi di ritardo.
Tornerò nella mia cella imbottita ora ....
Se la tua installazione di nginx ha il supporto Lua, puoi rimanere sul client per un po 'di tempo con il metodo sleep. L'operazione non è bloccante e non blocca il lavoratore. Tenere presente che l'utente non può essere trattenuto all'infinito in quanto potrebbero verificarsi infine altri timeout relativi al socket / firewall relativi alla rete.
server {
listen 8502;
location / {
#25 seconds sleep
content_by_lua_block {
ngx.sleep(25);
ngx.exit(ngx.HTTP_BAD_GATEWAY);
}
}
}
Quindi nel tuo elenco upstream devi aggiungere il server sopra come backup per contenere 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
}
E questo dovrebbe essere incluso nella specifica della posizione proxy:
proxy_read_timeout 30; #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
lua
modulo su nginx su Ubuntu 17.04 eseguire:sudo apt-get install libnginx-mod-http-lua
La cosa più vicina che conosco è questo progetto , ma non l'ho mai usato. So che la vernice ha il controllo del backend, forse vuoi dare un'occhiata.