被动健康检查

upstream backend {
    server backend1.example.com;
    server backend2.example.com max_fails=3 fail_timeout=30s;
}

被动健康检查说明

  • max_fails=3:设置最大失败次数为 3
  • fail_timeout=30s:设置失败超时时间为 30 秒

被动健康检查原理: 被动健康检查是一种基于响应状态码的健康检查方法,当后端服务器返回错误状态码或超时时,会计入失败次数,当失败次数达到上限时,后端服务器会被标记为不可用。

参数说明

参数说明默认值
max_fails最大失败次数1
fail_timeout失败超时时间10s

参数说明原理

  • max_fails:设置最大失败次数,当失败次数达到上限时,后端服务器会被标记为不可用
  • fail_timeout:设置失败超时时间,当后端服务器被标记为不可用后,会在失败超时时间后重新尝试连接

健康检查流程

健康检查流程分为以下几个步骤:

  1. Nginx 发送请求:Nginx 发送请求到后端服务器
  2. 后端服务器返回响应:后端服务器返回响应给 Nginx
  3. Nginx 检查响应状态码:Nginx 检查响应状态码,如果响应状态码为错误状态码,会计入失败次数
  4. Nginx 检查失败次数:Nginx 检查失败次数,如果失败次数达到上限,后端服务器会被标记为不可用
  5. Nginx 重新尝试连接:Nginx 会在失败超时时间后重新尝试连接后端服务器

健康检查流程原理: 健康检查流程分为五个步骤,Nginx 发送请求到后端服务器,后端服务器返回响应给 Nginx,Nginx 检查响应状态码,如果响应状态码为错误状态码,会计入失败次数,Nginx 检查失败次数,如果失败次数达到上限,后端服务器会被标记为不可用,Nginx 会在失败超时时间后重新尝试连接后端服务器。

示例

upstream backend {
    server backend1.example.com max_fails=3 fail_timeout=30s;
    server backend2.example.com max_fails=2 fail_timeout=20s;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

示例说明

  • backend1.example.com max_fails=3 fail_timeout=30s:设置最大失败次数为 3,失败超时时间为 30 秒
  • backend2.example.com max_fails=2 fail_timeout=20s:设置最大失败次数为 2,失败超时时间为 20 秒

示例原理

  • backend1.example.com 会在失败 3 次后被标记为不可用,会在 30 秒后重新尝试连接
  • backend2.example.com 会在失败 2 次后被标记为不可用,会在 20 秒后重新尝试连接

错误状态码

以下状态码会被计入失败次数:

  • 500、502、503、504:服务器错误

错误状态码原理: 当后端服务器返回错误状态码时,会计入失败次数。

注意事项

  • 被动健康检查基于响应状态码
  • 超时和错误都会计入失败次数
  • 失败次数达到上限后,服务器会被标记为不可用
  • 失败超时时间后,服务器会重新尝试连接