nginx 不内置 fair 模块,它是适配 1.2–1.6 版本的第三方模块,已多年未更新且不兼容 1.19+,生产环境慎用;推荐使用 least_conn、ip_hash 或 openresty+lua 等更安全方案。

nginx 本身不内置 fair 模块,它是一个第三方负载均衡模块,需手动编译安装。现代 Nginx 推荐使用官方原生的 least_conn 或 ip_hash,但若确需按响应时间动态调度(即“响应快的多分、慢的少分”),fair 是一种历史方案——不过要注意:它已多年未更新,不兼容新版 Nginx(1.19+),且无官方维护,生产环境慎用。
确认 fair 模块是否可用
fair 模块最早适配 Nginx 1.2–1.6 版本,依赖旧版 API。当前主流 Nginx(如 1.20/1.22/1.24)已移除其所需钩子函数(如 ngx_http_upstream_init_round_robin_peer 的扩展接口),直接编译会报错。除非你锁定使用 Nginx 1.4.x 或 1.6.x,并从以下地址获取源码:
- https://github.com/gnosek/nginx-upstream-fair(原始仓库,最后一次提交在 2014 年)
- 部分镜像站或老版本发行包中可能附带预编译模块(如某些 OpenResty 旧版)
编译安装 fair 模块(仅限兼容版本)
以 Nginx 1.6.3 为例:
- 下载 Nginx 源码和 fair 模块源码,解压到同一父目录
- 进入 nginx 源码目录,执行:
./configure --add-module=../nginx-upstream-fair --prefix=/usr/local/nginx make && sudo make install- 验证模块加载:
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o fair,有输出表示成功
配置 upstream 使用 fair 策略
fair 模块启用后,在 upstream 块中添加 fair; 指令即可:
upstream backend {
fair;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
它会自动记录每个后端的响应时间(基于 upstream response time),并优先将新请求分发给最近响应最快的节点。注意:
– 不支持权重(weight)、最大失败次数(max_fails)等参数与 fair 共存;
– 无健康检查能力,需配合 health_check 或第三方模块(如 nginx_upstream_check_module)使用;
– 日志中无法直接看到 fair 决策依据,调试需开启 debug 日志并过滤 upstream fair 关键词。
更安全的替代方案(推荐)
如需响应时间感知的负载均衡,建议采用以下原生方式:
- least_conn + keepalive:连接数少的优先,间接反映处理能力,稳定且无需额外模块
- 第三方模块 nginx-upstream-dynamic-servers:配合 Prometheus + Exporter 实时上报响应延迟,通过 API 动态调整权重
-
OpenResty + Lua:在
access_by_lua_block中调用resty.http预检后端延迟,再 set $upstream_addr 路由,灵活性高但开发成本上升 - 服务网格层(如 Envoy):内置 outlier detection 和 adaptive load balancing,更适合微服务场景











