nginx.conf 本身不实现高可用,需配合keepalived和vip实现主备切换;其关键点是监听通配地址、配置健康检查接口、保持主备配置一致,并通过脚本与keepalived联动。

nginx.conf 本身不直接实现高可用,它只负责 Nginx 服务的运行逻辑(如反向代理、负载均衡、静态资源处理等)。真正的高可用依赖外部组件——主要是 Keepalived 配合虚拟 IP(VIP)来完成主备切换。nginx.conf 的作用是配合这套机制:确保本机 Nginx 正常响应、监听正确端口,并与 Keepalived 的健康检查脚本协同工作。
nginx.conf 需要配合高可用的关键点
在双机高可用架构中,两台服务器各自运行独立的 Nginx 实例,它们的 nginx.conf 并不需要特殊“集群配置”,但需满足以下基础要求:
-
监听地址不绑定具体物理 IP:server 块中 listen 指令应写为
listen 80;或listen *:80;,而不是listen 192.168.0.109:80;。这样当 VIP(如 192.168.0.105)漂移到本机时,Nginx 才能实际接收请求。 -
启用健康检查所需的响应能力:Keepalived 通常通过 shell 脚本(如
/usr/local/src/nginx_check.sh)检测 Nginx 是否存活。该脚本常执行curl -s http://127.0.0.1:80/health或直接检查进程。因此 nginx.conf 中建议配置一个轻量级 location 用于探活,例如:
location /health {<br> return 200 "OK";<br> add_header Content-Type text/plain;<br>}
- 避免配置冲突或单点依赖:不要在 nginx.conf 中硬编码另一台 Nginx 的地址做 upstream 备份——这不是高可用集群的做法;upstream 应指向后端真实服务(如 Tomcat、API),而前端入口由 VIP 统一暴露。
Keepalived 与 nginx.conf 的协作关系
Keepalived 不读取 nginx.conf,但它依赖 Nginx 的运行状态。二者通过以下方式联动:
- Keepalived 启动时,会运行自定义的
vrrp_script(比如检查 Nginx 进程或 HTTP 接口);这个脚本的成功与否,影响 VRRP 实例的优先级升降。 - 当主节点 Nginx 异常(崩溃、端口无响应),脚本返回失败 → Keepalived 降低本机优先级 → VIP 自动漂移到备用节点。
- 备用节点上的 nginx.conf 必须已就绪:监听通配地址、有相同探活路径、配置一致(除日志路径等本地差异外)。
两台机器上 nginx.conf 的一致性建议
为减少切换异常,主备 Nginx 的配置应高度一致:
- http 块中的 gzip、timeout、keepalive、log_format 等全局参数保持相同;
- 所有 server 块的 listen、server_name、root、proxy_pass 等核心配置完全一致;
- 若使用 include 加载子配置(如
include /etc/nginx/conf.d/*.conf),确保两边 conf.d 目录内容同步; - 注意文件权限和用户:user 指令(如
user nginx;)需对应系统实际运行用户,且该用户对相关目录有读取权限。
验证配置是否就绪的小技巧
部署完成后,可快速确认基础连通性:
- 在每台机器上执行
nginx -t,确保语法正确、配置加载无报错; - 手动运行健康检查脚本(如
sh /usr/local/src/nginx_check.sh),返回 0 表示通过; - 用
curl -I http://127.0.0.1/health验证探活接口返回 200; - 启动 keepalived 后,用
ip a查看 VIP 是否出现在当前活跃网卡上。











