nginx虚拟主机配置无需特殊改动,关键在于主备节点配置完全一致且独立可用,vip漂移由keepalived在网络层完成;需同步server块(listen、server_name、root等)、避免硬编码ip、确保健康检查真实探测http服务。

灾备切换时 Nginx 虚拟主机配置本身不需要特殊改动,关键在于确保主备节点的虚拟主机配置完全一致且独立可用,同时由 Keepalived 管理的虚拟 IP(VIP)统一对外暴露服务。真正的切换动作发生在网络层(VIP漂移),而非 Nginx 配置变更。
以下是实际落地中必须注意的要点:
虚拟主机配置需严格同步
两台服务器上的 server 块必须完全相同,包括:
-
listen端口(通常为80或443) -
server_name(如example.com、_或通配符) -
root、index、location规则路径(建议使用绝对路径,避免因工作目录差异导致静态资源找不到) - SSL 证书路径(若启用 HTTPS,证书文件需在主备机相同路径下存在,且权限一致)
例如,标准配置应类似:
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
⚠️ 不要依赖 localhost 或本机 IP 作为 server_name,否则 VIP 切换后可能因 Host 匹配失败返回默认 server 或 404。
不要在配置里硬编码真实 IP
Nginx 的 server 块不感知 VIP,它只监听端口并响应匹配的 Host 头。只要请求通过 VIP 到达任一节点的 80 端口,且 Host 头匹配 server_name,Nginx 就能正确路由。因此:
- 避免在
proxy_pass中写死主节点内网地址(应指向后端 Tomcat 集群的固定域名或 VIP,而非某台具体机器) - 后端 upstream 应配置为稳定地址(如
upstream backend { server 192.168.50.10:8080; server 192.168.50.11:8080; }),与主备 Nginx 节点解耦
配合 Keepalived 实现无缝接管
Nginx 本身无状态,切换靠 VIP 漂移完成。但需确保:
- 主备节点 Nginx 均处于运行状态(
systemctl start nginx) - Keepalived 配置中启用了对 Nginx 进程的健康检查(如
vrrp_script chk_http_port),避免 VIP 漂到一台 Nginx 已宕但 Keepalived 仍存活的机器上 - 检查脚本应真实探测 HTTP 服务(如
curl -f http://127.0.0.1/health || exit 1),而不仅是ps aux | grep nginx
验证时重点测 Host 和路径行为
切换后,用浏览器或 curl 访问 http://192.168.50.166/(VIP)时:
- 返回页面内容应与切换前一致(说明虚拟主机配置生效)
- 查看响应头中的
Server字段或页面内嵌标识,确认流量确实落到备用节点 - 若访问
http://192.168.50.166/api/xxx出现 502,问题大概率在 upstream 配置或后端服务连通性,而非虚拟主机本身
不复杂但容易忽略











