nginx需搭配keepalived实现高可用:nginx负责反向代理与负载均衡,keepalived负责vip漂移与健康检查;配置须规范upstream、proxy_pass及头信息透传;客户端必须访问vip;健康检查应覆盖l3/l4/l5三层。

Nginx 本身不提供主备切换能力,要构建真正可用的反向代理网关,必须搭配 Keepalived 实现故障自动接管。核心思路是:Nginx 负责请求转发与负载分发,Keepalived 负责虚拟 IP(VIP)漂移和节点健康判断,两者分工明确、缺一不可。
反向代理配置必须规范可靠
高可用的前提是代理逻辑本身稳定。Nginx 配置需满足三点基础要求:
- 使用 upstream 块定义后端服务组,例如:
upstream backend { server 192.168.202.133:80; server 192.168.202.134:80; },避免硬编码单点地址; - 在 location 中通过 proxy_pass http://backend; 指向 upstream 名称,便于后续增删后端节点;
- 透传关键头信息:
proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
,防止后端丢失真实客户端上下文。
Keepalived 主备协同实现 VIP 自动接管
两台 Nginx 服务器部署 Keepalived,共用一个对外暴露的 VIP(如 192.168.202.100),通过 VRRP 协议协调谁持有该 IP:
- 主节点配置 state MASTER、priority 100;备节点设为 state BACKUP、priority 90;
- 启用 track_script 关联检测脚本,例如检查
nginx -t && systemctl is-active --quiet nginx; - 脚本返回非零时,Keepalived 触发状态降级,VIP 自动漂移到备机;恢复后可配置是否自动切回(取决于 nopreempt 是否启用)。
客户端必须访问 VIP,而非物理 IP
所有流量入口必须指向 VIP,这是整个高可用机制生效的前提:
- 生产环境通过 DNS 将域名(如 gateway.example.com)解析到 VIP;
- 测试阶段可在本地 /etc/hosts 添加映射:
192.168.202.100 gateway.example.com; - 若仍直连某台 Nginx 的真实 IP,一旦该节点宕机,请求将直接失败,高可用形同虚设。
健康检查需覆盖多层,避免误判
Keepalived 支持 L3/L4/L5 三级检测,建议组合使用提升可靠性:
- L3 ping 检测:确认网络连通性;
- L4 端口检测:验证 Nginx 进程监听了 80/443;
-
L5 应用检测:用 curl 请求 Nginx 自身的健康接口(如
location /health { return 200 "ok"; }),确保服务能响应且逻辑正常。











