Nginx与Keepalived协同构建高可用反向代理网关:Nginx统一处理HTTP/HTTPS请求,Keepalived通过VRRP管理VIP主备切换,依赖健康检查实现故障自动转移,要求同网段部署、配置严格一致、证书同步及定期故障演练验证。

用 Nginx 和 Keepalived 搭建分布式反向代理网关,核心不是堆机器,而是解决“单点入口”这个关键瓶颈。主备自动切换 + 统一虚拟 IP(VIP)+ 健康检查,三者配合才能让网关真正扛住故障。
明确角色分工:Nginx 负责转发,Keepalived 负责守门
Nginx 在这里不做负载均衡后端服务器,而是作为对外的统一反向代理入口;Keepalived 不代理流量,只管“谁该持有 VIP”。两台机器上都装 Nginx,配置完全一致(包括 upstream、proxy_pass、SSL 等),但只有持有 VIP 的那台才实际处理请求。
- Nginx 实例始终监听本地 IP(如 192.168.10.10)和 VIP(如 192.168.10.100)上的 80/443 端口
- Keepalived 通过 VRRP 协议协商主备关系,master 绑定 VIP,backup 等待接管
- VIP 必须和两台机器在同一个二层网络(同网段),不能跨 VLAN 或 NAT
Keepalived 配置要点:状态、优先级、健康检查缺一不可
主节点配置中 state MASTER、priority 100、virtual_router_id(同一组必须相同)是基础;但真正决定是否切换的是健康检查逻辑。
- 推荐使用
track_script自定义检测脚本,比如每秒检查curl -f http://127.0.0.1/health是否返回 200 - 避免仅依赖
notify_master/notify_backup启停 Nginx——现代部署更倾向 Nginx 常驻运行,靠 VIP 切换来控制流量流向 - authentication 密码必须一致,virtual_ipaddress 只写 VIP,不带子网掩码(Keepalived 自动处理)
Nginx 配置一致性与安全细节
两台 Nginx 的 conf 文件内容要 100% 一致,尤其是 proxy_set_header、upstream 分组名、SSL 证书路径等。差异会导致切换后行为异常。
- 所有
proxy_pass地址应指向后端真实服务集群(如 http://backend_servers),而不是 localhost 或某台固定 IP - 建议在 location 块中显式设置
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;,增强容错 - 若启用 HTTPS,证书和私钥文件需同步到两台机器相同路径,权限设为 600
验证与日常维护关键动作
上线前必须手动模拟故障,不能只看日志是否启动成功。
- 用
ip addr show确认 VIP 是否出现在 master 网卡上 - 从客户端 ping VIP,再 curl -I http://VIP,确认响应来自当前 master
- 执行
systemctl stop keepalived在 master 上,观察 backup 是否 2 秒内获得 VIP 并接续服务 - keepalived 日志默认在 /var/log/messages,过滤关键词 “VRRP_Instance” 和 “Transition” 可快速定位状态变化


















