主题
概念卡片:网关与负载均衡全景(Nginx / LVS / Gateway / Ribbon)
一句话机制:流量进入系统要经过多层分发——LVS/Nginx 是「服务端负载均衡」(独立节点,转发请求),Ribbon/LoadBalancer 是「客户端负载均衡」(调用方本地选实例),Gateway 是「应用网关」(路由 + 鉴权 + 限流);三者分层协作,各管一段。
三种角色的定位
| 角色 | 代表 | 位置 | 职责 |
|---|---|---|---|
| 服务端 LB | Nginx / LVS / F5 | 独立节点 | 四层/七层转发、反向代理、静态资源 |
| 客户端 LB | Ribbon / LoadBalancer | 调用方本地 | 从注册中心拉清单、选实例 |
| 应用网关 | Spring Gateway | 应用层 | 路由断言、鉴权、限流、跨域 |
Nginx 核心能力
nginx
# 反向代理 + 负载均衡
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
}
server {
listen 80;
location /api/ { proxy_pass http://backend; } # 反向代理
location /static/ { root /data; } # 静态资源
}- 反向代理:隐藏后端真实地址,统一入口
- 负载均衡:
upstream+ 策略(轮询/权重/ip_hash/最少连接) - 静态资源缓存:
expires+gzip,扛高并发静态请求 - HTTPS:SSL 终止
LVS vs Nginx(层级不同)
| LVS | Nginx | |
|---|---|---|
| 层级 | 四层(传输层,TCP 转发) | 七层(应用层,HTTP 解析) |
| 性能 | 更高(只转发不解析) | 较低(要解析 HTTP) |
| 功能 | 纯负载均衡 | 负载均衡 + 反向代理 + 缓存 + 重写 |
典型组合:LVS + Keepalived 做主备四层 LB → Nginx 做七层反向代理 → Gateway 做应用网关 → Ribbon 做服务间调用。
不变量(必须成立的约束)
- Nginx 是服务端 LB(独立节点转发),Ribbon 是客户端 LB(本地选实例),一个在入口、一个在服务间。
- LVS 四层、Nginx 七层:四层只按 IP:端口转发、性能高;七层能按 URL 路由、功能强。
- Gateway 是「应用层网关」,处理业务横切逻辑(鉴权/限流),不替代 Nginx 的高性能转发。
踩坑案例
- 现象:Nginx 后面挂了多台应用,某台频繁 502。 原因:
upstream没配健康检查,请求仍转发到宕机实例。解决:配max_fails+fail_timeout剔除故障节点(或用 nginx-upsync 动态配置)。
常见误解
- 以为 Nginx 和 Gateway 二选一 → 两者分层:Nginx 扛入口流量/静态资源,Gateway 做应用层路由鉴权,常一起用。
- 以为负载均衡只有 Nginx → 还有客户端 LB(Ribbon/LoadBalancer),服务间调用靠它。
关联
- 客户端 LB:概念卡片:客户端负载均衡Ribbon
- 网关:概念卡片:Gateway网关
- 源:
B40-资源/语雀-Code-Summary/Middleware/RPC&Gateway/GatewayFrontNginx(6 篇:核心配置/动态路由/HTTPS/高并发缓存/LVS+Keepalived)