O Nginx retorna 502 enquanto o back-end está sendo reiniciado. Como posso fazer com que o proxy nginx tente novamente N vezes com atraso de M segundos? Existe um plugin ou algo mais?
16
Descobri que o Nginx levou ~ 2 segundos para esgotar as tentativas se você especificou centenas de instâncias do mesmo back-end:
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, repita conforme necessário!)
Sim, um argumento horrendo - mas acrescenta um certo grau de tenacidade ...
Ainda pior do que isso, você pode usar:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Supondo que o Nginx esteja sendo executado na porta 80, isso tentaria fazer um loop contínuo da solicitação em torno do Nginx até o localhost: 8080 responder. Ou seja, tente novamente um número infinito de vezes com atraso de zero segundos.
Vou voltar para o meu celular acolchoado agora ....
Se sua instalação do nginx tiver suporte para Lua, você poderá aguardar o cliente por algum tempo com o método sleep. A operação é sem bloqueio e não bloqueia o trabalhador. Lembre-se de que o usuário não pode ser mantido infinitamente, pois alguns outros tempos limite de soquete / firewall relacionados à rede podem ocorrer finalmente.
Em sua lista upstream, você precisa adicionar o servidor acima como backup para manter um cliente.
E isso deve ser incluído na sua especificação de local de proxy:
fonte
lua
módulo no nginx no ubuntu 17.04, execute:sudo apt-get install libnginx-mod-http-lua
A coisa mais próxima que conheço é esse projeto , mas nunca usei. Eu sei que o verniz tem verificação de back-end, talvez você queira dar uma olhada nele.
fonte