5 nginx timeout reverse-proxy apache-2.2
我们已将Nginx配置为 Apache 服务器群的反向代理,但我遇到了网关超时问题。
我们以人类可读形式的目标是:“在一秒钟内发送请求,但如果确实需要更长的时间,则无论如何都要交付”,对我来说,这意味着“尝试上游的第一个 Apache 服务器最多 500 毫秒。如果我们超时/一个错误,尝试下一个,依此类推,直到我们最终成功。”
现在我们的相关配置是这样的:
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;
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是 nginx 似乎将其误解为“尝试在一秒钟内从整个上游集群获得响应,如果我们不这样做,则会产生 50X 错误 - 对尝试任何上游服务器的时间没有任何限制”,其中显然不是我们的想法。
有什么办法可以让 nginx 做我们想做的事吗?
我认为你需要的是:
max_fails=0
和
proxy_next_upstream = timeout
根据文档:
最大失败次数=次数
设置在由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错误 | 超时| 无效标题 | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | 非幂等 | 离开 ...; 默认值:proxy_next_upstream错误超时;
上下文:http、服务器、位置 指定在哪些情况下应将请求传递到下一个服务器:
错误
与服务器建立连接、向服务器传递请求或读取响应标头时发生错误;
暂停
与服务器建立连接、向服务器传递请求或读取响应标头时发生超时;
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
| 归档时间: |
|
| 查看次数: |
4102 次 |
| 最近记录: |