keepalived不处理http域名转发,仅负责vip高可用和故障切换;nginx通过server_name匹配host头实现不同业务域名的隔离转发,keepalived与nginx协同部署:前者管理vip漂移,后者完成七层路由。

Keepalived 本身不处理 HTTP 域名转发,它只负责 VIP(虚拟 IP)的高可用和故障切换。真正实现“不同业务域名的隔离转发”,核心在 Nginx,Keepalived 只是为 Nginx 提供高可用保障。要达成目标,需将 Keepalived 与 Nginx 协同部署:Keepalived 管理 VIP,Nginx 基于 server_name 按域名做反向代理或路由分发。
Keepalived 负责 VIP 高可用,不参与域名逻辑
Keepalived 通过 VRRP 协议,在主备节点间漂移一个虚拟 IP(如 192.168.1.100)。客户端始终访问该 VIP,实际流量由当前 Master 节点上的 Nginx 处理。Keepalived 不解析 Host 头、不读取请求头、也不做任何七层判断——这些全部交给 Nginx。
- 配置 keepalived.conf 时,只需定义 VIP、优先级、健康检查(例如检测 Nginx 进程或端口是否存活)
- 健康检查建议用
tcp_check或简单 HTTP GET(如访问 /health),避免依赖复杂逻辑 - 两个节点的 Nginx 配置必须完全一致,否则 VIP 切换后行为不一致
Nginx 按 server_name 实现域名隔离
在 Nginx 中,每个 server 块通过 server_name 匹配请求中的 Host 头,从而将不同域名路由到不同后端服务。这是实现业务隔离的核心机制。
- 示例:业务 A(
app-a.example.com)和业务 B(app-b.example.com)分别指向不同 upstream - 确保 Nginx 监听 VIP 所在 IP(或 0.0.0.0),且
server_name精确匹配或使用通配符(如*.example.com) - 避免多个 server 块共用相同 server_name,否则 Nginx 启动会报错或行为不可预期
注意 DNS 与客户端访问路径
客户端必须将各业务域名解析到 Keepalived 管理的 VIP(而非真实节点 IP),否则高可用和域名隔离都会失效。
- DNS 记录应指向 VIP(如 A 记录 app-a.example.com → 192.168.1.100)
- 若用 hosts 测试,需在客户端 hosts 中同步映射所有业务域名到 VIP
- 浏览器或 curl 发起请求时,Host 头必须与 Nginx 的
server_name一致,否则可能落入 default_server
可选增强:Nginx + Keepalived 联动健康检查
让 Keepalived 更精准地感知 Nginx 服务能力,而不仅是进程存活。
- 在 Nginx 中配置一个轻量 health check 接口(如 location /health { return 200; })
- Keepalived 的 vrrp_script 中调用 curl -s --fail http://127.0.0.1/health,并根据返回码决定权重
- 这样即使 Nginx 进程在,但因配置错误无法响应域名请求,Keepalived 也能触发故障转移
不复杂但容易忽略:Keepalived 是“路标”,Nginx 是“收费站”。路标管走哪条路,收费站才管进哪个门。











