跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何使用 upstream 结合 fair 模块实现基于响应时间的静态资源负载均衡

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 获取
nginx-upstream-fair
源码(推荐 gnosek 维护的原始版本) 进入你当前使用的 Nginx 源码目录,执行:
./configure --add-module=/path/to/nginx-upstream-fair [其他原有参数]
运行
make && make install
完成安装 验证是否成功:
nginx -V 2>&1 | grep -o fair
,有输出即表示模块已加载 u ps tream 中启用 fair 算法 fair 指令本身无参数,位置必须在
upstream
块内、所有
server
行之后(顺序敏感):
upstream static_servers { server 192.168.5.10:8080; server 192.168.5.11:8080; server 192.168.5.12:8080; fair; # 必须放在最后,且不能加任何参数 }
fair 默认基于最近 3 次响应时间的平均值做决策,无需额外配置即可开始按响应快慢分发请求。 稿定在线PS PS软件网页版 下载 适配静态资源的健壮性增强 静态资源服务虽轻量,但节点偶发卡顿或网络抖动会影响 fair 的判断。建议搭配以下参数提升稳定性:
max_fails=2 fail_timeout=10s
:防止某台机器短暂超时后仍被持续压测 避免使用
weight
:fair 本身会动态调整“事实权重”,显式设 weight 会干扰其行为 静态资源通常无状态,不需
ip_hash
或
hash $request_uri
,否则削弱 fair 的时效性优势 反向代理静态资源 location 配置 确保静态资源请求实际走 upstream,例如匹配常见后缀:
location ~* \.(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"; }
注意:不要在该 location 中开启
proxy_buffering off
等可能放大延迟波动的设置;fair 依赖准确的响应时间采样,缓冲策略应保持默认。

相关文章