nginx反向代理高可用需结合keepalived实现主备切换,nginx负责请求转发与透传,keepalived管理vip漂移和健康检查,dns或hosts指向vip,通过脚本监控nginx进程触发切换。

要让 Nginx 的 HTTP 反向代理具备高可用,核心不是单靠 Nginx 本身,而是用它 + Keepalived 构建主备切换能力,解决单点故障问题。Nginx 负责转发请求,Keepalived 负责虚拟 IP(VIP)漂移和健康检查,两者配合才能真正“挂一台、顶一台”。
反向代理基础配置必须到位
高可用的前提是代理本身稳定可靠。先确保 Nginx 正确转发请求,并透传关键信息:
- 使用 upstream 定义后端服务组,支持多台 HTTP 服务器,例如:
upstream backend { server 192.168.202.133:80; server 192.168.202.134:80; } - proxy_pass 指向 upstream 名称,而非单个 IP,便于后续扩展;
- 务必设置 proxy_set_header,至少包含 Host、X-Real-IP 和 X-Forwarded-For,避免后端丢失客户端真实信息;
- 合理设置超时参数,如 proxy_connect_timeout 5s;、proxy_read_timeout 30s;,防止因后端响应慢拖垮代理节点。
Keepalived 实现 VIP 自动漂移
两台 Nginx 服务器(一主一备)共用一个虚拟 IP(如 192.168.202.100),对外只暴露这一个地址。Keepalived 通过 VRRP 协议协调谁持有该 IP:
- 主节点 state MASTER,优先级设为较高值(如 100);备节点设为较低值(如 90);
- 配置 virtual_router_id 必须一致,且在局域网内唯一;
- 启用 track_script 关联自定义脚本,实时检查本地 Nginx 进程是否存活;
- 脚本逻辑简单有效:若
ps -C nginx --no-header | wc -l为 0,就执行systemctl stop keepalived,触发 VIP 切换。
DNS 或客户端指向 VIP,而非物理 IP
所有用户访问都应指向虚拟 IP(如 www.503.com → 192.168.202.100),而不是某台 Nginx 的真实地址:
- 生产环境通过 DNS 解析绑定 VIP;测试阶段可在客户端 hosts 文件中临时映射;
- 确保后端服务器能正常响应,且 Nginx 配置中 server_name 与域名匹配,否则 proxy_pass 可能 502;
- 不要依赖 Nginx 自身做“主备”,它没有内置集群协调能力——Keepalived 才是高可用的底盘。
验证与日常维护要点
上线前和每次变更后,需确认三个层面是否连通:
- 用
ip a查看 VIP 是否出现在主节点网卡上; - 手动停掉主节点 Nginx 或 keepalived,观察 VIP 是否秒级迁移到备节点;
- 从外部 curl 或浏览器访问域名,确认页面返回正常、响应头中 Server 字段不暴露后端细节;
- 日志里重点关注 keepalived 的状态切换记录(/var/log/messages)和 Nginx error.log 中的连接失败原因。











