nginx 开源版不支持健康度打分,仅提供 up/down 二元状态;可通过 weight 静态分级或结合外部系统(如 prometheus+lua)实现近似打分;nginx plus 支持细粒度健康检查但无自定义评分公式。

Nginx 开源版本身不支持健康度打分(health scoring)机制,它只提供二元状态管理:节点要么 up(可用),要么 down(不可用)。所谓“打分”,比如给每个后端赋 0–100 分、按得分加权调度或动态调整权重,原生 Nginx 并无对应指令或模块。
如果你看到类似“健康打分”的需求,通常指向两类实际可行的替代路径:
被动检查 + 权重动态调节(近似打分效果)
开源 Nginx 可通过 max_fails/fail_timeout 触发临时下线,再配合 weight 手动分级,实现粗粒度“健康倾向”:
- 健康稳定的节点设高权重(如
weight=10) - 新上线或偶发抖动的节点设低权重(如
weight=3) - 配合
slow_start=30s防止冷启动冲击
示例:
upstream backend {
server 192.168.1.10:8080 weight=10 max_fails=3 fail_timeout=30s slow_start=30s;
server 192.168.1.11:8080 weight=5 max_fails=2 fail_timeout=20s;
server 192.168.1.12:8080 weight=2 max_fails=1 fail_timeout=10s;
}
注意:权重是静态配置,不会自动随响应时间、错误率变化而实时调整。这不是真正打分,而是人工预估后的分级使用。
主动探测 + 外部系统协同(接近真实打分)
要实现动态健康评分(例如:响应延迟 5% 扣 30 分),需引入外部组件:
- 使用
nginx_upstream_check_module做 HTTP 探活,但它只返回up/down,不输出分数 - 搭配 Prometheus + Grafana 采集各后端指标(延迟、错误码、连接数)
- 用自定义脚本(Python/Go)计算健康分,并通过 API 修改 Nginx 的
upstream配置(需 reload 或用nginx -s reload) - 或接入 OpenResty +
lua-resty-upstream-healthcheck,在 Lua 层实现逻辑并动态 set_weight
典型流程:
- 每 5 秒调用
/health和/metrics - 综合成功率、P95 延迟、CPU 负载生成 0–100 分
- 若分数 curl -X POST http://nginx-admin/set-weight?server=192.168.1.11&weight=0
- 后端 Lua 模块接收请求,更新共享内存中的权重值
这种方式需要开发投入,但能真正支撑 SLA 级别的健康感知。
商业版 NGINX Plus 支持有限度的“健康指标”
NGINX Plus R24+ 提供 health_check 指令配合 match 块,可基于响应头、状态码、响应体做更细粒度判定,还支持 zone 共享状态和 dashboard 查看实时健康数据(如 fails, unavailable, response_time),但它依然不暴露原始分值或允许自定义加权公式,仅用于 up/down 决策和监控展示。
不复杂但容易忽略











