Nginx负载均衡策略

Nginx 作为高性能的反向代理服务器,其内置的负载均衡策略非常成熟和强大。这些策略主要在 upstream 模块中配置,用于将客户端请求分发到一组后端服务器。


1. 轮询(Round Robin)

  • 默认策略。如果没有显式指定,Nginx 就使用此策略。

  • 工作原理:将每个新请求按顺序依次分配给后端服务器列表中的下一台。循环往复。

  • 配置示例

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100;
    server 192.168.1.101;
    server 192.168.1.102;
}
  • 特点:绝对平均,假设所有服务器性能相同且请求处理耗时相似。

2. 加权轮询(Weighted Round Robin)

  • 轮询的增强版,考虑了服务器性能差异。

  • 工作原理 :通过 weight 参数指定权重。权重越高,被分配到的请求比例越大。

  • 配置示例

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100 weight=3; # 处理3个请求
    server 192.168.1.101 weight=2; # 处理2个请求
    server 192.168.1.102 weight=1; # 处理1个请求
    # 请求分配模式大致为:100, 100, 100, 101, 101, 102, 100, 100, 100...
}
  • 应用场景:服务器配置不均(CPU、内存不同)。

3. 最少连接(Least Connections)

  • 工作原理 :将新请求优先分配给当前活跃连接数最少的后端服务器。

  • 配置指令least_conn

  • 配置示例

nginx

复制代码
upstream backend_servers {
    least_conn;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 应用场景:请求处理时间长短不一(如有的请求是短 API 调用,有的是长耗时计算),能更公平地分配负载。

4. 加权最少连接(Weighted Least Connections)

  • 最少连接的增强版,同样考虑服务器权重。

  • 工作原理:在考虑活跃连接数的同时,结合权重进行更智能的分配。

  • 配置示例

nginx

复制代码
upstream backend_servers {
    least_conn;
    server 192.168.1.100 weight=3;
    server 192.168.1.101 weight=2;
}

5. IP 哈希(IP Hash)

  • 工作原理 :根据客户端 IP 地址计算哈希值,将同一 IP 的请求总是路由到同一台后端服务器。

  • 配置指令ip_hash

  • 配置示例

nginx

复制代码
upstream backend_servers {
    ip_hash;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 关键特性

    • 会话保持:确保来自同一客户端的请求会话(Session)不丢失,无需额外配置 Session 共享。

    • 缺点:服务器数量变化时(增/删),大部分 IP 的映射会改变,可能导致会话失效。

  • 应用场景:对会话一致性有要求,且没有外部 Session 存储(如 Redis)的应用。


6. 通用哈希(Generic Hash)

  • IP 哈希的通用版本,可以基于任意变量(如 URL、请求参数)进行哈希。

  • 配置指令hash

  • 配置示例

nginx

复制代码
upstream backend_servers {
    hash $request_uri consistent; # 按请求URI哈希
    server 192.168.1.100;
    server 192.1.68.1.101;
}
  • consistent 参数 :启用一致性哈希,能最大程度减少后端服务器增减时带来的缓存失效或会话影响。

  • 应用场景:缓存代理、需要将特定请求固定到特定服务器的场景。


7. 最短响应时间(Least Time)

  • Nginx Plus 专有功能(商业版)。

  • 工作原理 :综合最短平均响应时间最少活动连接数两个指标,将请求发给当前响应最快、连接最少的服务器。

  • 配置指令least_time headerleast_time last_byte

    • header: 只计算到接收完响应头的时间。

    • last_byte: 计算到接收完整个响应体的时间。

  • 配置示例

nginx

复制代码
upstream backend_servers {
    least_time header;
    server 192.168.1.100;
    server 192.168.1.101;
}
  • 应用场景:对延迟极其敏感的应用,追求最优的用户体验。

负载均衡策略对比表

策略 指令 优点 缺点 适用场景
轮询 (默认) 简单,绝对公平 忽略服务器性能差异和请求耗时 服务器同构,请求简单
加权轮询 weight 考虑服务器性能 忽略请求实际处理时间 服务器配置不均
最少连接 least_conn 动态,适合请求耗时不均 忽略服务器性能差异 请求处理时间差异大
IP哈希 ip_hash 会话保持简单 服务器增减影响大,可能负载不均 需要会话保持且无共享Session
通用哈希 hash 灵活,可一致性哈希 配置稍复杂 缓存代理,特定请求路由
最短响应时间 least_time (Plus) 性能最优,延迟最低 Nginx Plus 专有,需付费 对延迟敏感的商业应用

其他关键配置参数

server 指令中,除了 weight,还有:

  • max_failsfail_timeout: 定义在特定时间内失败多少次后,将该服务器标记为不可用(健康检查)。

  • backup: 将该服务器标记为备份服务器,只有当所有主服务器都不可用时才会被使用。

  • down: 手动将服务器标记为永久不可用。

nginx

复制代码
upstream backend_servers {
    server 192.168.1.100 max_fails=3 fail_timeout=30s;
    server 192.168.1.101 backup;
}
相关推荐
闲云一鹤2 小时前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
Sinclair2 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean3 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩3 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
何中应3 天前
Nginx转发请求错误
前端·后端·nginx
海天鹰4 天前
【免费】PHP主机=域名+解析+主机
服务器
不是二师兄的八戒4 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器
芝士雪豹只抽瑞克五4 天前
Nginx 高性能Web服务器笔记
服务器·nginx
失重外太空啦4 天前
Tomcat
java·服务器·tomcat