目前在ngx的文档里没找到upstream里的代理服务器组的单个代理服务器的超时的配置,
但是对应的在proxy_next_upstream里timeout又是默认的情况。想请教下有这个配置吗,
具体是在哪里呢?

doujiang24 嗯 proxy*timeout 是通过location变相控制整个代理服务器组的 那怎么解释proxy_next_upstream的timeout是默认值的情况呢 这个timeout是依据什么来的呢
至于balancer 如果要对标upstream的话 需要自己额外做权重 断路器 等等不少东西

tweyseo

proxy_next_upstream的timeout是默认值的情况呢

这个具体是指什么情况呢,感觉没太明白呢

doujiang24 这里的描述:

The directive also defines what is considered an unsuccessful attempt of communication with a server. The cases of error, timeout and invalid_header are always considered unsuccessful attempts, even if they are not specified in the directive. The cases of http_500, http_502, http_503, http_504, and http_429 are considered unsuccessful attempts only if they are specified in the directive. The cases of http_403 and http_404 are never considered unsuccessful attempts.

tweyseo
哦,貌似我之前一直理解错了

proxy_next_upstream timeout;
这个实际上是针对每一次回上游的重试,不是针对某个 upstream server 的。
然后 nginx 里所有的网络都是有超时的,回上游也是一样的,proxy*timeout 也是有默认值的,所以默认项里可以有 timeout。

doujiang24 我理解是针对单个代理服务器的 而且我尝试过用proxy_*_timeout来触发proxy_next_upstream timeout 但是实际上proxy_*_timeout直接返回给客户端了 而没有继续去代理服务器组里再继续尝试了

tweyseo
应该不对的,nginx 对于重试的基本逻辑就是,回源请求之后,判断是否可以重试下一个 upstream server,这里面判断的条件就包括了 proxy_next_upstream, proxy_next_upstream_out, proxy_next_upstream_tries
感觉是你之前尝试的例子有点问题,可能是命中了其他条件,比如 POST 请求默认就是不会重试的

    Write a Reply...