Nginx实现基于响应时间的静态资源负载均衡需编译集成fair模块,在upstream块末尾添加fair指令,依赖最近3次RTT均值动态选节点,并配合max_fails=2、fail_timeout=10s增强稳定性,禁用weight和ip_hash以保障时效性。
要实现基于响应时间的静态资源负载均衡,核心是让 Nginx 在 up
stream
中启用
fair
调度算法——它不轮询、不固定权重,而是实时依据后端服务器的响应耗时(RTT)动态选节点,特别适合静态资源这类 I/O 密集、响应快慢差异明显的场景。
编译安装 fair 模块
fair 是第三方模块,Nginx 官方不内置,必须手动编译集成:
从 GitHub 获取
源码(推荐 gnosek 维护的原始版本)
进入你当前使用的 Nginx 源码目录,执行:
运行
完成安装
验证是否成功:
,有输出即表示模块已加载
u
ps
tream 中启用 fair 算法
fair 指令本身无参数,位置必须在
块内、所有
行之后(顺序敏感):
fair 默认基于最近 3 次响应时间的平均值做决策,无需额外配置即可开始按响应快慢分发请求。
稿定在线PS
PS软件网页版
下载
适配静态资源的健壮性增强
静态资源服务虽轻量,但节点偶发卡顿或网络抖动会影响 fair 的判断。建议搭配以下参数提升稳定性:
:防止某台机器短暂超时后仍被持续压测
避免使用
:fair 本身会动态调整“事实权重”,显式设 weight 会干扰其行为
静态资源通常无状态,不需
或
,否则削弱 fair 的时效性优势
反向代理静态资源 location 配置
确保静态资源请求实际走 upstream,例如匹配常见后缀:
注意:不要在该 location 中开启
等可能放大延迟波动的设置;fair 依赖准确的响应时间采样,缓冲策略应保持默认。
nginx-upstream-fair./configure --add-module=/path/to/nginx-upstream-fair [其他原有参数]make && make installnginx -V 2>&1 | grep -o fairupstreamserverupstream static_servers {
server 192.168.5.10:8080;
server 192.168.5.11:8080;
server 192.168.5.12:8080;
fair; # 必须放在最后,且不能加任何参数
}max_fails=2 fail_timeout=10sweightip_hashhash $request_urilocation ~* \.(jpg|jpeg|png|gif|webp|css|js|woff2|ttf)$ {
proxy_pass http://static_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
expires 7d;
add_header Cache-Control "public, immutable";
}proxy_buffering off