一、前言
经过前面 7 篇文章的学习,我们已经掌握了 Nginx 的核心功能、HTTP 改写、SSL/TLS、主动健康检查以及 Tengine 增强特性。本文将这些知识点串联起来,从架构设计的角度,建立 F5(硬件负载均衡)↔ Nginx/HAProxy(软件负载均衡)↔ Keepalived(高可用)的全链路映射。
二、整体架构
传统三层架构
用户请求
│
▼
┌─────────────────────────────────────┐
│ L4 层:F5 / HAProxy+Keepalived │
│ VIP 负载均衡 │
│ 职责:SSL 卸载、四层分发 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ L7 层:Nginx / Tengine │
│ 域名路由、反向代理 │
│ 职责:七层 HTTP 处理 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 后端:APISIX / 业务服务 │
│ 动态路由、限流、鉴权 │
└─────────────────────────────────────┘
生产拓扑
┌─────────────────────────────────────────────────────┐
│ 公网/内网用户 │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ DNS 解析 │
│ www.example.com → 10.205.106.80(VIP) │
│ api.example.com → 10.205.106.80(VIP) │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ L4 层:F5 / HAProxy + Keepalived │
│ │
│ ┌─────────────────────────────────────────────────┐│
│ │ Keepalived(VRRP) ││
│ │ MASTER: 10.205.106.80(VIP) ││
│ │ BACKUP: 10.205.106.81 ││
│ │ 心跳检测 → VIP 漂移 ││
│ └──────────────┬──────────────────────────────────┘│
│ │ │
│ ┌──────────────▼──────────────────────────────────┐│
│ │ HAProxy / F5(L4 负载均衡) ││
│ │ mode tcp(四层转发) ││
│ │ Nginx 集群作为后端 ││
│ └──────────────┬──────────────────────────────────┘│
└─────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ L7 层:Nginx / Tengine 集群 │
│ │
│ Nginx-1:10.205.xxx.1 Nginx-2:10.205.xxx.2 │
│ │
│ server_name www.example.com → 后端集群 A │
│ server_name m.example.com → 后端集群 B │
│ server_name api.example.com → APISIX 网关 │
│ │
│ SSL 卸载(证书在此终结) │
│ 健康检查(Tengine check 模块) │
│ 动态 upstream(Tengine dyups 模块) │
└──────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 后端服务层 │
│ │
│ APISIX 网关(动态路由、限流、鉴权) │
│ Web 服务器(PHP/Java/Node.js) │
│ 数据库(MySQL/Redis/MongoDB) │
└─────────────────────────────────────────────────────┘
三、F5 ↔ Nginx ↔ HAProxy 概念映射
核心概念映射表
| F5 概念 | Nginx 对应 | HAProxy 对应 | Keepalived 对应 |
|---|---|---|---|
| VIP (Virtual IP) | 无原生 VIP,需 Keepalived | 无原生 VIP,需 Keepalived | VRRP 虚拟 IP |
| VS (Virtual Server) | server { listen } |
frontend |
--- |
| Pool | upstream { } |
backend |
--- |
| Pool Member | server IP:PORT; |
server IP:PORT check |
--- |
| Monitor(健康检查) | max_fails + fail_timeout(被动) |
option httpchk / check |
--- |
| SNAT | proxy_set_header |
option forwardfor |
--- |
| Profile (TCP/HTTP/SSL) | 模块配置 | mode tcp / http |
--- |
| iRules | Lua / rewrite 模块 | ACL + use_backend | --- |
| Persistence | ip_hash |
stick-table / cookie |
--- |
| HA Active/Standby | 无原生 HA | 无原生 HA | VRRP 主备切换 |
| 心跳线 | --- | --- | VRRP 组播/单播 |
最常见的工作模式
模式 1:F5(L4)→ Nginx(L7)→ 后端
F5 做四层转发(只看 IP:Port),Nginx 做七层路由(看域名)
模式 2:F5(L4 + SSL)→ Nginx(L7)→ 后端
F5 做 SSL 卸载 + 四层转发,Nginx 只做七层路由,不需要证书
模式 3:HAProxy + Keepalived(L4)→ Nginx(L7)→ 后端
开源方案替代 F5,HAProxy 做四层转发,Keepalived 提供 VIP 漂移
四、Keepalived 高可用核心
VRRP 协议
Keepalived 通过 VRRP(Virtual Router Redundancy Protocol)实现 VIP 漂移:
MASTER(10.205.106.80) BACKUP(10.205.106.81)
┌──────────────────┐ ┌──────────────────┐
│ 持有 VIP │ │ 不持有 VIP │
│ 10.205.106.200 │ │ │
│ │ VRRP │ │
│ 发送 VRRP 组播 │◄─────────►│ 接收 VRRP 组播 │
│ 每隔 1 秒 │ 心跳 │ 等待 MASTER 超时 │
└────────┬─────────┘ └────────┬─────────┘
│ │
│ MASTER 宕机后 │
│ 3 秒内收不到 VRRP 组播 │
│ │
│ ────────────────────────────►│
│ │
│ 自己变成 MASTER
│ 加上 VIP,发送 gratuitous ARP
│ 开始处理流量
▼
配置示例
nginx
# MASTER 节点
vrrp_instance VI_1 {
state MASTER # 初始状态:MASTER
interface eth0 # 绑定的网卡
virtual_router_id 51 # VRRP 组 ID(同一组内必须一致)
priority 100 # 优先级(越高越优先成为 MASTER)
advert_int 1 # 心跳间隔 1 秒
nopreempt # 不抢占(避免不必要的切换)
virtual_ipaddress {
10.205.106.200/24 # VIP 地址
}
track_script {
check_haproxy # 监控脚本
}
}
健康检查脚本
生产环境建议做5层检测:
层级 1:进程检测(最快速)
pgrep haproxy → 进程是否存在
层级 2:端口检测(最常用)
ss -tlnp | grep 8080 → 端口是否监听
层级 3:网关检测(网络是否正常)
ping -c 1 10.205.106.1 → 网关是否可达
层级 4:系统负载检测(避免误判)
uptime → CPU 负载是否过高
层级 5:后端可用性检测(最准确)
curl -s http://127.0.0.1:8080/health → 后端是否正常
五、全链路故障排查
排查路径
用户访问不通
│
▼
① DNS 解析是否正确?
dig www.example.com
返回 VIP 地址?
│
├── 否 → DNS 配置问题
│
▼
② VIP 是否可达?
ping 10.205.106.200
返回响应?
│
├── 否 → F5/Keepalived 问题
│
▼
③ L4 端口是否开放?
telnet 10.205.106.200 80
返回连接成功?
│
├── 否 → F5 VS/HAProxy 配置问题
│
▼
④ L7 路由是否正常?
curl -H "Host: www.example.com" http://10.205.106.200/
返回 200?
│
├── 否 → Nginx server_name 匹配问题
│
▼
⑤ 后端是否正常?
直接 curl 后端 IP:PORT
返回 200?
│
├── 否 → 后端服务问题
│
▼
⑥ 证书是否正常?
curl -I https://www.example.com/
返回 SSL 证书信息?
│
├── 否 → 证书过期或配置错误
│
▼
✅ 全链路正常
六、架构设计决策树
选型参考
需要负载均衡方案?
│
├── 有预算? → 用 F5(硬件,高性能,商业支持)
│
└── 开源方案?
│
├── 只需要四层转发?
│ ├── 简单场景 → HAProxy(mode tcp)
│ └── 高性能场景 → LVS(内核态)
│
├── 需要七层 HTTP 处理?
│ ├── 基础需求 → Nginx(rewrite、SSL、反向代理)
│ └── 高级需求 → Tengine(主动健康检查、动态 upstream)
│
└── 需要高可用?
└── Keepalived(VRRP VIP 漂移)
三层架构 vs 二层架构
三层架构(推荐生产环境):
L4:HAProxy + Keepalived(VIP 浮动)
L7:Nginx/Tengine(域名路由、SSL 卸载、健康检查)
后端:业务服务
二层架构(简化环境):
L4+L7:HAProxy(单一组件完成四层和七层)
后端:业务服务
什么时候用三层? 需要 SSL 卸载、域名路由、重写 URL、多域名、健康检查等高级功能时。
什么时候用二层? 只需要 TCP 转发、不需要 HTTP 处理时。
七、F5 工程师迁移指南
从 F5 迁移到开源方案
| F5 功能 | 开源替代 | 实现难度 |
|---|---|---|
| Virtual Server | HAProxy frontend | ★☆☆ 简单 |
| Pool | HAProxy backend | ★☆☆ 简单 |
| Monitor | Tengine check / HAProxy option httpchk | ★★☆ 中等 |
| SNAT | HAProxy option forwardfor / Nginx proxy_set_header | ★☆☆ 简单 |
| SSL 卸载 | HAProxy bind *:443 ssl crt / Nginx ssl_certificate |
★★☆ 中等 |
| iRules | HAProxy ACL / Nginx rewrite | ★★★ 较难 |
| 会话保持 | HAProxy stick-table / Nginx ip_hash | ★★☆ 中等 |
| 高可用 | Keepalived VRRP | ★★☆ 中等 |
证书迁移步骤
1. 从 F5 导出证书(tmsh list sys crypto cert/key)
2. 验证证书有效性(openssl verify)
3. 合并证书链(cat server.crt ca.crt > fullchain.pem)
4. 配置到 Nginx/HAProxy
5. 验证 HTTPS 连接
6. 迁移完成后停用 F5 上的配置
八、总结
学习路线图
Nginx 架构 → 虚拟主机 → 反向代理 → HTTP 改写 → SSL/TLS → 健康检查 → Tengine → 架构设计
① ② ③ ④ ⑤ ⑥ ⑦ ⑧
核心能力
| 能力 | 掌握程度 |
|---|---|
| Nginx 架构原理(Master-Worker、epoll、热重载) | ✅ 深刻理解 |
| 虚拟主机匹配规则(5 种 server_name) | ✅ 实操验证 |
| 负载均衡策略(5 种算法 before/after) | ✅ 实操验证 |
| HTTP 改写(5 种操作) | ✅ 实操验证 |
| SSL/TLS 配置(证书生成、HTTPS、HSTS) | ✅ 实操验证 |
| 主动健康检查(Python 脚本实现) | ✅ 实操验证 |
| Tengine 增强功能(check + dyups) | ✅ 实操验证 |
| 架构设计(F5 ↔ Nginx ↔ HAProxy 映射) | ✅ 建立体系 |
一句话总结
Nginx/Tengine 是做七层 HTTP 反向代理的首选,HAProxy 是做四层 TCP 负载均衡的利器,Keepalived 提供 VIP 高可用,三者结合可以完美替代 F5 硬件负载均衡器。
全系列完