双活反向代理集群:keepalived + 两台nginx实现vip漂移,主挂备秒接,实测切换

直接输出一份可落地的企业级 Nginx 反向代理容灾与高可用架构设计手册,不讲概念、不堆术语,只列关键模块、配置逻辑和避坑要点。
一、双活反向代理集群(防单点故障)
用 Keepalived + 两台 Nginx 实现 VIP 漂移,主挂了备秒接,实测切换时间
- 主节点 Keepalived 配置中设 priority 100,备节点设 priority 90
- 必须加 vrrp_script 检查 nginx 进程存活,不能只靠端口通断
- VIP 绑定在内网网卡(如 eth0),避免公网 IP 漂移引发 DNS 缓存问题
- 两台 Nginx 配置文件完全同步,用 rsync + inotify 或 Ansible 自动分发
二、后端服务容灾机制(自动摘除+兜底)
不只是“转发”,要让 Nginx 主动判断后端是否真可用:
- 在 upstream 中启用 max_fails=3 fail_timeout=30s,连续失败 3 次即剔除
- 搭配 proxy_next_upstream error timeout http_500 http_502 http_503,转发失败时自动重试其他节点
- 为关键接口(如登录、下单)单独配置 upstream,并设置更激进的健康检查周期
- 预留 backup 服务器:server 192.168.1.99:8080 backup; 故障时才启用,避免日常负载不均
三、会话级容灾(登录态不中断)
电商、后台系统最怕用户刷着刷着掉登录,光靠 ip_hash 不够稳:
- 优先用 sticky cookie(需编译安装 nginx-sticky-module):
sticky cookie srv_id expires=1h domain=.example.com path=/; - 配合后端 Session 共享(Redis)或 JWT 无状态方案,降低对单台应用服务器的依赖
- 禁用 ip_hash 在移动网络场景——运营商 NAT 导致大量用户被挤到同一台后端
- 灰度发布期间,新旧版本共存时,cookie 路由规则要兼容,避免老用户被错误打到新版本导致报错
四、配置热加载与故障回滚(运维零停机)
改配置不是 reload 就完事,得有验证和兜底:
- 每次修改前执行 nginx -t,失败立即终止,不写入日志也不 reload
- 用 include /etc/nginx/conf.d/*.conf 拆分配置,按业务/环境隔离,避免单文件过大出错难定位
- 上线前先在测试集群跑 ab 或 wrk 压测 5 分钟,确认新配置不引发连接堆积或超时飙升
- 保留最近 3 个版本的 conf 备份,脚本化回滚:cp /etc/nginx/conf.bak.2 /etc/nginx/nginx.conf && nginx -s reload











