Nginx作为反向代理:如何正确configuration网关超时?

我们已经将Nginxconfiguration为Apache服务器场的反向代理,但是我遇到了网关超时问题。

我们的目标是:“在一秒内发送请求,但如果真的需要更长的时间,则无论如何都要发送”,这对我来说意味着“尝试第一个上游的Apache服务器最多500毫秒,如果我们得到一个超时/一个错误,尝试下一个,直到我们终于成功。“

现在我们的相关configuration是这样的:

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.xx:8001 max_fails=1 fail_timeout=10s backup; server 10.1.xx:8001 max_fails=1 fail_timeout=10s backup; server 10.1.xx:8001 max_fails=1 fail_timeout=10s backup; } 

这里的问题是,nginx似乎误解了这一点:“尝试在一秒钟内从整个上游集群获得响应,如果我们不这样做,就会发出50倍的错误 – 没有任何限制尝试任何上游服务器的时间限制”显然不是我们想到的。

有没有办法让nginx做我们想要的?

我认为你需要的是:

max_fails=0

proxy_next_upstream = timeout

每个文档:

max_fails =数字

设置在fail_timeout参数设置的持续时间内发生的与服务器通信失败的次数,以便在fail_timeout参数设置的持续时间内将服务器视为不可用。 默认情况下,失败尝试次数设置为1.零值将禁用尝试计费。 proxy_next_upstream,fastcgi_next_upstream,uwsgi_next_upstream,scgi_next_upstream和memcached_next_upstream指令定义了什么是不成功的尝试。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

和:

语法: proxy_next_upstream错误| 超时| invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | closures…; 默认:proxy_next_upstream错误超时;

上下文:http,server,location指定在哪种情况下请求应该传递给下一个服务器:

错误

在与服务器build立连接,传递请求或读取响应头时发生错误;

时间到

在与服务器build立连接,传递请求或读取响应头时发生超时;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream