pode nginx tentar novamente se o unicórnio estiver sobrecarregado e retornar um 502?

3

É possível fazer com que o nginx repita um segundo backend antes de retornar um 502 para o cliente?

Algo parecido com este trabalho?

Front end:

# haproxy:85 => [a few app servers]:8000
# more specifically:
# haproxy => [nginx => unicorn (502 when busy)]

# Will this try a second app server when the first returns 502?

upstream haproxy {
  server 127.0.0.1:85;
  server 127.0.0.1:85 backup;
}

server {
  listen 80;
  proxy_pass http://haproxy;
  proxy_next_upstream http_502;
}

Back end:

upstream unicorn {
  server unix:/tmp/unicorn.sock fail_timeout=0;
}

server {
  listen 8000;
  proxy_pass http://unicorn;
}

De qualquer forma, estou apenas curioso. Na verdade, isso é provavelmente muito estúpido porque a nova tentativa pode acabar atingindo o mesmo servidor sobrecarregado e acabaria retornando um 502 de qualquer maneira ...

    
por Aaron Gibralter 26.12.2011 / 06:09

1 resposta

3

Até onde eu sei, o Nginx tenta automaticamente todos os servidores disponíveis - e se todos retornarem um erro, ele retornará o código de erro da última resposta.

proxy_next_upstream apenas parece oferecer um controle melhor sobre quais erros serão processados e quais serão ignorados (mas o padrão já é qualquer 'erro' na conexão, envio ou recebimento - com, creio eu, anos 60 timeout).

De acordo com a documentação (o texto poderia usar algum trabalho):

"If with an attempt at the work with the server error occurred, then the request will be transmitted to the following server and then until all workers of server not are tested. If successful answer is not succeeded in obtaining from all servers, then to client will be returned the result of work with the last server."

Você pode verificar esse comportamento com um script que registra a hora (ou qualquer dado) em um arquivo e retorna 502. Se você encontrar apenas 1 linha registrada, o nginx não tentou vários servidores, se você encontrar duas linhas registradas isso aconteceu.

    
por 27.12.2011 / 05:43

Tags