ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 说明 当代理服务器将请求转发给应用服务器之后,应用服务器吃吃没有将请求响应,那么nginx是不是应该具备一些容错机制.比如将请求转发给下一台应付服务器上面呢;用来提高系统的健壮性; ## proxy_next_upstream 语法: ``` proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 |non_idempotent | off ``` 默认值: ``` proxy_next_upstream error timeout; ``` 上下文: ``` http | server | location ``` 可选值: | 可选参数 | 含义 | | --- | --- | | error | 向上游服务器传输请求或读取响应头发生错误 | | timeout | 向上游服务器传输请求或读取响应头发生超时 | | invalid_header | 上游服务器返回无效的响应 | | http_500 | HTTP响应状态码为500时 | | http_502 | HTTP响应状态码为502时 | | http_503 | HTTP响应状态码为503时 | | http_504 | HTTP响应状态码为504时 | | http_403 | HTTP响应状态码为403时 | | http_404 | HTTP响应状态码为404时 | | http_429 | HTTP响应状态码为429时 | | non_idempotent | **非幂等请求失败时是否需要转发下一台上游服务器,这里要特别注意,如果不写这个参数,那么只会转发GET的请求,对于post,put,delete的请求方式是不会转发的** | | off | 禁用请求失败转发功能 | ## proxy_next_upstream_timeout 代理服务器将请求转发给应用服务器后需要等待的时间,如果超过这个值就可以将请求给下一个应用服务器了; 语法: ``` proxy_next_upstream_timeout times; ``` 默认值: ``` proxy_next_upstream_timeout 0; //0是无限制等待 ``` 上下文: ``` http | server | location ``` ## proxy_next_upstream_tries 当应用服务器无响应的时候需要调度的次数; 语法: ``` proxy_next_upstream_tries number; ``` 默认值: ``` proxy_next_upstream_timeout 0; //0就是不限制调度的次数,如果设为3,就是失败后需要调度3次,超过3次就不调度了,直接给客户端返回错误; ``` 上下文: ``` http | server | location ``` ## proxy_intercept_errors 上游返回码大于300时,是直接将上游响应返回客户端还是按照error_page处理; 语法: ``` proxy_intercept_errors on | off; ``` 默认值: ``` proxy_intercept_errors on; ``` 上下文: ``` http | server | location ``` ## 实例 因为默认proxy_next_upstream error timeout; ,即使不设置,那么一台上游服务器挂掉了,也会调度到可用的上游服务器上; ``` location /balance { proxy_next_upstream off; //off的情况下,因为有一台upstream挂掉了,多次请求总会返回一次502 Bad Gateway proxy_pass http://back_end; } ``` ## error和timeout 1. proxy_next_upstream设为error基本都是上游服务器内部错误导致的; 2. 设为timeout是上游服务器是正常的可以正常响应,但是响应的速度太慢,在设定的时间内没有响应完成就会触发;适用于超时场景