通常我们会使用Nginx的ngx_http_upstream_module模块来配置服务器组,示例如下
upstream springboot {
server 10.3.73.223:8080 max_fails=2 fail_timeout=30s;
server 10.3.73.223:8090 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location /test {
proxy_pass http://springboot;
}
}
在30s内(fail_timeout,默认值为10s),与服务端通讯失败2次(max_fails,默认值为1,设置为0则认为服务端一直可用),则认为服务器不可用
不可用服务器在30s内与服务端通讯成功2次,则认为服务器恢复
特别需要注意的是,何为与服务端通讯失败是由upstream的使用方定义的(ngx_http_proxy_module、proxy_next_upstream、fastcgi_next_upstream和memcached_next_upstream)
以proxy_next_upstream为例:
与服务端建立连接、向服务端发送请求或者解析服务端响应头时,发生异常或超时将被认为是通讯失败
服务端返回的响应为空或不合法将被认为是通讯失败
如果配置了http_500,http_502,http_503,http_504和http_429,服务端返回这些状态码将被认为是通讯失败
服务端返回http_403和http_404永远不会被认为通讯失败
当upstream中的一台服务器响应失败时, Nginx会将请求转发给下一台服务器,直到所有的服务器都发送过该请求,如果此时依然无法获得成功的响应,客户端将收到最后一台服务器返回的响应结果
使用上面的配置进行测试:
package com.sean.test;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframe