nginx proxy tenta novamente enquanto o backend está reiniciando

13

O Nginx retorna 502 enquanto o back-end está sendo reiniciado. Como posso fazer o proxy nginx repetir N vezes com atraso de M segundos? Existe um plugin ou algo mais?

    
por user78416 14.04.2011 / 16:19

3 respostas

3

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 kludge horrendo - mas adiciona um grau de tenacidade ...

Ainda pior que isso, você poderia usar:

    server  localhost:8080 max_fails=0;     
    server  localhost:80 backup;        

Supondo que o Nginx esteja sendo executado na porta 80, isso tentará fazer o loop continuamente em torno do Nginx até que localhost: 8080 responda. Ou seja tente novamente um número infinito (?) de vezes com atraso de zero segundos.

Vou voltar para a minha célula acolchoada agora ...

    
por 06.03.2012 / 22:06
2

Se a sua instalação do nginx tiver suporte a Lua, você poderá segurá-lo por algum tempo com o método de suspensão. A operação é sem bloqueio e não bloqueia o trabalhador. Tenha em mente que o usuário não pode ser mantido infinitamente, pois alguns outros tempos limite de soquete / firewall relacionados à rede podem ocorrer.

server {
    listen 8502;
    location / {
        #25 seconds sleep
        content_by_lua_block {
             ngx.sleep(25); 
             ngx.exit(ngx.HTTP_BAD_GATEWAY);
        }
    }
}

Em seguida, na sua lista upstream, você precisa adicionar o servidor acima como backup para manter um cliente.

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 isso deve ser incluído na sua especificação de localização com proxy:

proxy_read_timeout         30;  #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
    
por 02.09.2017 / 22:56
1

A coisa mais próxima que eu sei é deste projeto , mas eu nunca usei. Eu sei que o verniz tem verificação de back-end, talvez você queira dar uma olhada nele.

    
por 14.04.2011 / 22:37

Tags