Nginx代理与LVS(NAT/DR)全方位对比

一、总体对比

项目 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
  • 特点:不关心具体业务协议,性能明显优于七层

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=1arp_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 追求极致性能,适合作为架构最前端的大流量入口。

两者通常结合使用,而非互相替代。

相关推荐
maosheng11461 小时前
NFS服务器的搭建有多种类型linux-linux
linux·运维·服务器
普通young man1 小时前
Linux基础开发工具集合
linux·运维·服务器
Elsius.1 小时前
网络运维与网络安全 阶段一 基础篇二十一
运维
都在酒里2 小时前
Linux字符设备驱动开发(一):从零搭建一个可直接运行的驱动框架(附完整代码)
linux·运维·驱动开发
遇印记2 小时前
软考知识点(防火墙)
运维·服务器·网络·学习·安全
qq_452396232 小时前
第五篇:《Docker 容器生命周期管理》
运维·docker·容器
Dymc2 小时前
【Ubuntu系统指令启动】一招解决:Ubuntu 20.04 桌面双击 .desktop 文件不再“用文本编辑器打开”
linux·运维·ubuntu·一键运行
蜀道山老天师2 小时前
Docker 进阶:数据持久化与容器网络互联(数据卷、挂载目录、端口映射、自定义网络)
运维·网络·docker·云原生·容器
qq_白羊座2 小时前
CI/CD 与 DevOps 二
运维·ci/cd·devops