Linux下搭建Nginx高可用集群分三步:先配置单台反向代理(upstream+proxy_pass,注意路径斜杠、真实IP传递),再部署多节点统一配置并确保后端可达,最后用Keepalived通过VRRP实现VIP漂移与故障自动接管。

Linux 下搭建 Nginx 反向代理并组成高可用集群,核心是分三步走:先让单台 Nginx 正确代理后端服务,再部署多节点形成负载能力,最后用 Keepalived 实现故障自动接管。整个过程不依赖复杂中间件,关键在配置细节和状态联动。
反向代理配置要点
代理功能靠 upstream 和 proxy_pass 协同完成。需注意:后端服务地址必须可连通;代理路径末尾斜杠影响转发行为(如 proxy_pass http://127.0.0.1:8080/; 会剥离匹配的 location 路径);务必开启 proxy_set_header 传递真实客户端 IP。
- 在
/etc/nginx/nginx.conf的http块中定义 upstream:
server 192.168.200.101:8080 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.200.102:8080 weight=1 max_fails=3 fail_timeout=30s;
}
- 在
server块中引用:
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
- 配置完执行
nginx -t检查语法,再systemctl reload nginx生效。
多节点负载均衡部署
至少准备两台 Nginx 服务器,安装方式统一(推荐 yum 安装,避免编译差异)。所有节点配置完全一致,包括 upstream 列表、SSL 证书路径、日志格式等。重点确保每台 Nginx 都能独立访问全部后端服务,否则某节点失效时流量切过去会直接报错。
- CentOS 系统关闭防火墙或放行必要端口:
firewall-cmd --permanent --add-port=80/tcp、--add-port=443/tcp、--add-port=112/udp(Keepalived 使用); - 后端应用服务(如 Tomcat)需监听真实 IP 或 0.0.0.0,不能只绑 127.0.0.1;
- 建议为每台 Nginx 设置唯一主机名(
hostnamectl set-hostname nginx-lb01),便于后续日志与监控区分。
Keepalived 实现 VIP 漂移
Keepalived 不是替代 Nginx,而是给它“上保险”。它通过 VRRP 协议在主备节点间协商虚拟 IP(VIP)归属,配合健康检查脚本判断 Nginx 是否存活。一旦主节点 Nginx 崩溃,VIP 秒级切换到备用节点。
- 主节点
/etc/keepalived/keepalived.conf关键项:
script "/usr/bin/pgrep nginx | wc -l"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.200.200/24
}
}
- 备节点仅需改
state BACKUP和priority 90,其余保持一致; - 启动 Keepalived 后,用
ip a查看 VIP 是否出现在主节点网卡上; - 手动停主节点 Nginx,观察 2–3 秒内 VIP 是否迁移——这是验证成功的最直接方式。
测试与验证方法
集群是否真正高可用,不能只看配置文件有没有报错,得动手模拟故障。
- 用浏览器或 curl 访问 VIP 地址(如
curl http://192.168.200.200),确认返回后端服务响应; - 在主节点执行
systemctl stop nginx,等待约 3 秒,立即再次请求 VIP,应仍能获得响应; - 登录备节点运行
ip a,确认 VIP 已绑定; - 恢复主节点 Nginx 后,VIP 通常不会自动切回(取决于
preempt_delay设置),可手动重启 Keepalived 或留待下次故障触发切换逻辑。











