1 )proxy_next_upstream 指令
语法:proxy_next_upstream error| timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | noidempotent | 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 | 非幂等请求失败时是否需要转发下一台上游服务器 |
off | 禁用请求失败转发功能,上游返回啥,nginx 返回啥给客户端 |
所谓幂等的请求, 是指这个请求发出去之后,无论请求多少次,得到的结果通常是一致的
非幂等与之相反,请求发出去后,可能在服务器上每次都会引起不同的结果
Post请求,它就是一个非幂等的 http 请求方法,因为可能会在后端服务器上创建一些资源
非幂等请求,可能对服务器造成不可预见的一些错误,在某些场景下是很危险的
关于上面的off
2 )proxy_next_upstream_timeout 指令
3 )proxy_next_upstream_tries 指令
4 )proxy_intercept_errors 指令
5 )配置测试
5.1 上游应用服务器 (使用Nginx模拟)
server { listen 4040; location / { return 200 'Return Result For Server 4040\n'; } } server { listen 4050; location / { return 503 'Return Result For Server 4050\n'; } }
5.2 Nginx 代理服务器
upstream test_tolerant_server { server 192.168.184.20:4040; server 192.168.184.20:4050; } server { listen 80; root /opt/nginx/html; location /503.html { } location /test/ { proxy_pass http://test_tolerant_server; # proxy_next_upstream http_503; error_page 503 /503.html; proxy_intercept_errors on; # proxy_read_timeout 5; } }
touch /opt/nginx/html/503.html
test 503 page