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

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

相关推荐
非凡ghost5 小时前
视频剪辑不用等渲染,这款开源工具让切分合并秒级完成
运维·电脑·软件需求
FII工业富联科技服务7 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
润滑卫士7 小时前
油液介电常数在线监测:测量原理与油液老化状态评估方法
运维
Rock Chin6978 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
浩浩测试一下9 小时前
Linux 底层知识点 1
linux·运维·服务器
Eloudy9 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技9 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据9 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
忆挽篱笙歌10 小时前
环境变量,本地变量
linux·运维·服务器
码间留白11 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions