Nginx可以通过多种方式实现后端服务器的健康检查,以下是几种常见的方法:
Nginx自带的被动健康检查通过max_fails
和fail_timeout
参数实现:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
max_fails
: 在fail_timeout
时间内失败多少次后标记服务器不可用fail_timeout
: 服务器被标记为不可用的时间,也是计算失败次数的窗口时间Nginx Plus提供更强大的主动健康检查功能:
upstream backend {
zone backend 64k;
server backend1.example.com;
server backend2.example.com;
health_check interval=5s fails=3 passes=2 uri=/health;
}
interval
: 检查间隔fails
: 多少次失败后标记为不健康passes
: 多少次成功检查后标记为健康uri
: 健康检查端点对于开源Nginx,可以使用第三方模块实现主动健康检查:
upstream backend {
server backend1.example.com;
server backend2.example.com;
check interval=3000 rise=2 fall=3 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
resolver 8.8.8.8 valid=10s;
upstream backend {
zone backend 64k;
server backend.example.com:12345 resolve;
health_check mandatory persistent;
}
对于更复杂的场景,可以编写自定义脚本结合Nginx:
#!/bin/bash
# health_check.sh
if curl -I http://backend/health | grep "200 OK"; then
exit 0
else
exit 1
fi
然后通过crontab定期执行并更新Nginx配置。
以上方法可以根据您的具体需求和Nginx版本选择最适合的配置方案。