nginx重试机制proxy_next_upstream
nginx作为反向代理服务器,后端RS有多台服务器,上层通过一定机制保证容错和负载均衡。
nginx的重试机制就是容错的一种
官方链接:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#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 ...; Default: proxy_next_upstream error timeout; Context: http, server, location 指定应将请求传递到下一个服务器的情况: error # 与服务器建立连接,向其传递请求或读取响应头时发生错误; timeout # 在与服务器建立连接,向其传递请求或读取响应头时发生超时; invalid_header # 服务器返回空的或无效的响应; http_500 # 服务器返回代码为500的响应; http_502 # 服务器返回代码为502的响应; http_503 # 服务器返回代码为503的响应; http_504 # 服务器返回代码504的响应; http_403 # 服务器返回代码为403的响应; http_404 # 服务器返回代码为404的响应; http_429 # 服务器返回代码为429的响应(1.11.13); non_idempotent # 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求; off # 禁用将请求传递给下一个服务器。
下面还有一个参数影响重试次数,0表示不限制。:
Syntax: proxy_next_upstream_tries number; Default: proxy_next_upstream_tries 0; Context: http, server, location
举例如下:
upstream app-proxy { server 192.168.5.100:8080; server 192.168.5.101:8080; check interval=2000 rise=1 fall=3 timeout=3000 type=http; check_keepalive_requests 1; # check_http_send "HEAD /status/status.html HTTP/1.1\r\n\r\n"; check_http_send "GET /status/status.html HTTP/1.1\r\nConnection: close\r\nHost: localhost\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } location / { proxy_pass http://app-proxy; proxy_next_upstream error timeout http_500 http_502 http_503 http_504; proxy_next_upstream_tries 3; proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; proxy_pass_request_headers on; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; set $domain default;