Nginx como proxy reverso: como configurar corretamente o tempo limite do gateway?

5

Configuramos Nginx como um proxy reverso para um farm de servidores Apache, mas estou tendo problemas com os tempos limite do gateway.

Nosso objetivo em forma legível é: "Entregue uma solicitação em um segundo, mas se realmente demorar mais, entregue de qualquer maneira", o que para mim se traduz em "Experimente o primeiro servidor Apache no upstream para no máximo 500 ms. um tempo limite / um erro, tente o próximo e assim por diante até que finalmente tenhamos sucesso. "

Agora, nossa configuração relevante é esta:

location @proxy {
    proxy_pass         http://apache$request_uri;

    proxy_connect_timeout 1s;
    proxy_read_timeout 2s;

}

[...]

upstream apache {
 server 127.0.0.1:8001          max_fails=1 fail_timeout=10s;
 server 10.1.x.x:8001           max_fails=1 fail_timeout=10s backup;
 server 10.1.x.x:8001           max_fails=1 fail_timeout=10s backup;
 server 10.1.x.x:8001           max_fails=1 fail_timeout=10s backup;
}

O problema aqui é que o nginx parece entender mal isso como "Tente obter uma resposta de todo o cluster upstream dentro de um segundo e entregar um erro 50X se não o fizermos - sem nenhum limite quanto tempo para tentar qualquer servidor upstream ", o que obviamente não é o que tínhamos em mente.

Existe alguma maneira de fazer com que o nginx faça o que queremos?

    
por Marko 20.03.2012 / 17:14

1 resposta

1

Eu acho que você precisa:

max_fails=0

e

proxy_next_upstream = timeout

de acordo com os documentos:

max_fails=number

sets the number of unsuccessful attempts to communicate with the server that should happen in the duration set by the fail_timeout parameter to consider the server unavailable for a duration also set by the fail_timeout parameter. By default, the number of unsuccessful attempts is set to 1. The zero value disables the accounting of attempts. What is considered an unsuccessful attempt is defined by the proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream directives.

link

e:

Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off ...; Default: proxy_next_upstream error timeout;

Context: http, server, location Specifies in which cases a request should be passed to the next server:

error

an error occurred while establishing a connection with the server, passing a request to it, or reading the response header;

timeout

a timeout has occurred while establishing a connection with the server, passing a request to it, or reading the response header;

link

    
por 07.12.2016 / 01:48