Load Balancer 与 Reverse Proxy — 有什么区别
引言
负载均衡器(Load Balancer)和反向代理(Reverse Proxy)是网络基础设施中两个常被混淆的基础组件。二者都位于客户端与服务器之间,都接收请求并进行转发。但它们的目标和功能并不相同。
在实践中,很多工具同时兼具两种角色(Nginx、HAProxy),这进一步加剧了混淆。下面详细拆解。
Reverse Proxy — 它做什么
反向代理是代表后端服务器接收客户端请求的服务器。客户端并不知道自己实际在与哪一台服务器通信。
核心功能
隐藏基础设施 — 客户端只能看到代理的 IP,看不到真实服务器。这提升了安全性。
SSL 终止 — 由代理处理 SSL/TLS,把加密运算的开销从后端服务器上卸下来。
缓存 — 保存响应以应对重复请求,无需再访问后端。
压缩 — 对响应进行 gzip/brotli 压缩,节省带宽。
攻击防护 — 过滤恶意请求,DDoS 防护。
URL 重写 — 在转发到后端之前修改请求路径。
注入请求头 — X-Real-IP、X-Forwarded-For 及其他服务头。
Load Balancer — 它做什么
负载均衡器是把进入的请求分发到多台后端服务器上的服务器,用于优化负载并保证容错能力。
核心功能
负载分发 — 按照指定算法在服务器之间均匀分配请求。
健康检查 — 持续检测后端服务器的可用性。不可用的服务器会被移出服务器池。
会话保持 — 把某个用户的会话绑定到同一台服务器(sticky sessions)。
容错能力 — 服务器故障时自动重定向流量。
扩容 — 无需停机即可添加新服务器。
均衡算法
| 算法 | 说明 | 适用场景 |
|---|---|---|
| Round Robin | 顺序分发 | 配置相同的服务器 |
| Weighted Round Robin | 考虑服务器权重 | 性能不同的服务器 |
| Least Connections | 发往连接数最少的服务器 | 请求耗时差异较大 |
| IP Hash | 基于客户端 IP 哈希 | 需要会话保持 |
| Least Response Time | 发往最快的服务器 | 速度至关重要 |
| Random | 随机选择 | 追求简单 |
对比
| 参数 | Reverse Proxy | Load Balancer |
|---|---|---|
| 主要目标 | 客户端与服务器之间的中介 | 负载分发 |
| 后端服务器 | 1+ | 2+(通常) |
| SSL 终止 | 是 | 不一定 |
| 缓存 | 是 | 否 |
| 健康检查 | 基础 | 高级 |
| 负载均衡 | 基础 | 高级 |
| 压缩 | 是 | 否 |
| URL 重写 | 是 | 否 |
| L4 (TCP) | 部分支持 | 是 |
| L7 (HTTP) | 是 | 是 |
两者何时重叠
现实中,大多数工具都同时具备两种角色:
Nginx — 起初是反向代理,但支持带健康检查、weighted round robin 和 least connections 的 upstream 均衡。
HAProxy — 起初是负载均衡器,但支持 SSL 终止、请求头处理以及用于路由的 ACL。
Envoy — 设计为通用代理,完整支持两种角色,并额外提供 service mesh 能力。
Traefik — 面向容器的自动配置,反向代理 + 负载均衡器。
均衡层级
L4(传输层)
在 TCP/UDP 层做均衡。均衡器只能看到 IP 和端口,不解析请求内容。速度快,但无法按内容路由。
L7(应用层)
在 HTTP 层做均衡。解析 URL、请求头、cookie,可按请求内容进行路由。比 L4 慢,但更灵活。
差异示例
L4 看到的是:到 443 端口的 TCP 连接 → 按算法分发。
L7 看到的是:带 Cookie: session=abc123 的 GET /api/users → 路由到特定后端。
在代理行业中的应用
代理服务商
代理服务商两种组件都会使用:
Reverse Proxy — 前置网关,接收客户端连接、处理认证并路由到相应的 IP 池。
Load Balancer — 为保证容错,把请求分发到不同数据中心的代理服务器池。
自建基础设施
自建代理集群时:
1. 入口处的 Load Balancer 在各代理服务器之间分发流量
2. 每台代理服务器作为正向代理访问目标网站
3. 健康检查负责确认每个代理的可用性
如何选择
只需要 Reverse Proxy,如果:
- 只有一台后端服务器
- 需要 SSL 终止和缓存
- 想隐藏自己的基础设施
需要 Load Balancer,如果:
- 有多台后端服务器
- 需要容错能力
- 负载的均等分配至关重要
两者都需要(最常见的情况):
- 使用 Nginx、HAProxy 或 Traefik — 它们两件事都能做
结论
反向代理和负载均衡器是同一个任务的两个侧面:管理客户端与服务器之间的流量。反向代理侧重中介功能(SSL、缓存、安全),负载均衡器侧重负载分发和容错。在现代基础设施中,最常见的做法是使用同时兼具两种角色的工具。
