一、总体对比
| 项目 | Nginx 七层代理 (HTTP) | Nginx 四层代理 (Stream) | LVS-NAT | LVS-DR |
|---|---|---|---|---|
| 工作层级 | 七层 (应用层) | 四层 (传输层) | 四层 (传输层) | 四层 (但二层转发) |
| 本质 | 应用层代理(Proxy) | 四层代理(Proxy) | 内核级 NAT 转发 | 内核级二层 MAC 转发 |
| 连接方式 | 两次完整连接 + 拆包 | 两次 TCP 连接 | 单次连接(报文转发) | 单次连接(报文转发) |
| 是否改 IP | 会改 | 会改 | 会改 | 不改 |
| 是否改 MAC | 不改 | 不改 | 不改 | 会改 |
| 是否拆应用层 | 会完整拆包 | 不拆 | 不拆 | 不拆 |
| 性能 | 中 | 中高 | 极高 | 最高 |
| 功能丰富度 | 最强 | 较强 | 弱 | 弱 |
| 资源消耗 | 较高 | 中 | 极低 | 极低 |
| 适用场景 | 业务逻辑处理 | 中型流量通用转发 | 大流量、跨网段 | 超大流量、同网段 |
二、各自本质与工作原理
1. Nginx 七层代理(HTTP Proxy)
- 本质 :应用层网关 / 应用层代理
- 原理 :
- 完全终止客户端的 TCP 连接
- 完整解析(拆包) HTTP 请求(协议头、URL、Header、Cookie、Body 等)
- 根据内容做智能决策(路由、限流、缓存、Header 重写、WAF、灰度发布等)
- 再重新建立(再封装)一个 TCP 连接到后端服务器,并转发处理后的请求
- 响应同样经过 Nginx 处理后返回客户端
- 特点:功能最强大,但资源开销最大
2. Nginx 四层代理(Stream 模块)
- 本质 :四层 TCP/UDP 代理
- 原理 :
- Nginx 作为用户态进程
accept客户端连接 - 根据
upstream配置的负载均衡算法选择后端 RS - 主动建立新的 TCP 连接到后端
- 在两个连接之间双向复制数据(不解析应用层内容)
- 请求方向类似 DNAT(更改),响应方向类似 SNAT
- Nginx 作为用户态进程
- 特点:不关心具体业务协议,性能明显优于七层
3. LVS-NAT
- 本质 :内核级三层 NAT 转发(增强型路由)
- 原理 :
- 工作在 Linux 内核 Netfilter(PREROUTING / POSTROUTING 链)
- 请求方向:DNAT ------ 目的 IP 从 VIP 改为 RS 的 RIP(源 IP 保持为客户端 IP)
- 响应方向:SNAT ------ 源 IP 从 RS 的 RIP 改为 VIP
- 必须开启
ip_forward,依赖内核路由功能 - 不建立新连接,直接修改报文并转发
- 特点:性能极高,但所有流量(进+出)都经过 LVS,容易成为瓶颈
DNAT:目的地址转换,就是把目的地址(数据包头中的ip)改成RS真实服务器的地址(RIP)
SNAT:源地址转换,就是把源地址从后端RS改成代理设备的IP(通常是VIP) LVS-NAT就有完整的DNAT和SNAT的过程。即:
- 客户端请求时:
- src:CIP,dst:VIP;
- 到达LVS,进行DNAT ,变成:
- src:CIP,dst:RIP;
- RS回应时:
- src:RIP,dst:CIP;
- 到达LVS进行SNAT ,变成:
- src:VIP,dst:CIP;
4. LVS-DR(Direct Routing)
- 本质 :内核级二层 MAC 地址转发
- 原理 :
- LVS 与所有 RS 必须在同一二层网络(同一 VLAN)
- 请求 :只修改目的 MAC 地址 (LVS MAC → RS MAC),IP 头完全不变
- RS 通过 lo 接口绑定 VIP 来接收并处理请求
- 响应 :RS 直接 将响应包(源 IP 为 VIP)发给客户端,不经过 LVS
- RS 端需配置
arp_ignore=1、arp_announce=2
- 特点:性能最高,是生产环境最常用的 LVS 模式
三、Nginx 四层代理 与 LVS-NAT 深度对比
核心相同点
- 都属于四层负载均衡
- 都采用 "请求做 DNAT,响应做 SNAT" 的核心机制
- 最终对客户端透明,后端服务器无需感知代理的存在
- 共同目标都是实现负载均衡集群
核心区别
| 维度 | Nginx Stream 四层代理 | LVS-NAT |
|---|---|---|
| 工作位置 | 用户态(worker 进程) | 内核态(IPVS 模块) |
| 连接方式 | 两次连接(代理型) | 单次连接(转发型) |
| 报文处理方式 | 数据复制(内存拷贝) | 直接修改报文(几乎无拷贝) |
| 性能 | 中高 | 极高 |
| 资源消耗 | 较高 | 极低 |
| 功能丰富度 | 强(限流、日志、动态 upstream 等) | 弱 |
| 配置难度 | 简单(nginx.conf) | 较复杂(ipvsadm + 网络配置) |
| 适用流量 | 中小型 | 大型(数十万并发) |
四、报文变化示例(以 VIP=192.168.4.50 为例)

请求方向:
- 客户端请求包:
src=192.168.4.10, dst=192.168.4.50 - Nginx 四层 → RS:新建连接,源 IP 通常为 Nginx 内网 IP
- LVS-NAT → RS:
src=192.168.4.10, dst=192.168.8.100(仅改目的 IP)
响应方向:
- RS → 代理/LVS:
src=192.168.8.100, dst=192.168.4.10 - Nginx 四层 / LVS-NAT → 客户端:
src=192.168.4.50, dst=192.168.4.10
LVS-DR 则全程不修改 IP,仅在请求时修改目的 MAC,响应由 RS 直连客户端。
五、实际生产选择建议
- Nginx 七层 :需要 HTTPS 卸载、URL 路由、限流、日志、灰度等 → 必用
- Nginx 四层:流量中等、希望配置简单、需要一定扩展功能
- LVS-NAT:跨网段、配置相对简单、对性能有要求
- LVS-DR :大流量生产环境首选(性能最高)
主流高性能架构推荐:
bash
客户端
↓
LVS-DR(四层高性能分流)
↓
Nginx 七层代理(业务处理、HTTPS 卸载等)
↓
业务服务器集群
总结:
Nginx 和 LVS 都是为了实现负载均衡集群,但实现路径不同:
- Nginx 更灵活、功能丰富,适合中层处理;
- LVS 追求极致性能,适合作为架构最前端的大流量入口。
两者通常结合使用,而非互相替代。