servername 是 apache 虚拟主机的域名标识,不参与 vip 漂移;需确保 dns 解析指向 vip、apache 监听 *:80、ssl 证书覆盖域名,并通过端到端健康检查联动 keepalived 实现平滑切换。

ServerName 本身不参与 IP 漂移,也不需要“平滑切换”——它只是 Apache 配置中用于虚拟主机识别的标识符,和 Keepalived 管理的 VIP(虚拟 IP)是两个不同层级的概念。真正需要关注的是:如何让 ServerName 在 VIP 漂移后仍能正确响应请求,且不因配置或 DNS 缓存引发访问异常。
ServerName 的作用与限制
ServerName 定义的是 Apache 接收 HTTP 请求时,Host 头匹配的目标域名(如 ServerName api.example.com)。它不绑定到物理网卡或 IP 地址,也不影响 VIP 的归属或漂移逻辑。只要 Apache 监听在 * 或 0.0.0.0:80,VIP 绑定到哪台机器,该机器上的 Apache 就能收到发往该 VIP 的请求,并按 ServerName 匹配对应虚拟主机。
常见误区是试图把 ServerName 改成 VIP(如 ServerName 192.168.101.90),这不仅无意义,还可能导致 HTTPS SNI 不匹配、证书验证失败等问题。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
主备切换时 ServerName 相关的关键保障点
要确保用户访问不受 VIP 漂移影响,需协同处理以下三方面:
-
DNS 解析必须指向 VIP,而非物理 IP:所有客户端(浏览器、App、下游服务)应解析
api.example.com到虚拟 IP192.168.101.90,而不是直接写死主节点 IP。这样 VIP 漂移到备机后,请求自然流向新主机,ServerName 匹配照常生效。 -
Apache 必须监听通配地址:确认
Listen 80和<virtualhost></virtualhost>配置存在,不要写成<virtualhost></virtualhost>。否则 VIP 漂移到 192.168.101.78 后,Apache 不会监听该地址,请求被系统丢弃。 -
SSL 证书需覆盖实际访问域名,而非 IP:若启用 HTTPS,证书的 Subject Alternative Name(SAN)必须包含用户访问的域名(如
api.example.com),不能只填 VIP 或内网 IP。否则客户端会报证书无效,中断连接。
配合 Keepalived 做好健康检查联动
ServerName 正常工作的前提是 Apache 进程在 VIP 所在节点上真实运行并可响应。因此 Keepalived 的健康检查必须端到端验证:
- 检查脚本不应只看
httpd进程是否存在,而应执行:curl -s --connect-timeout 2 -o /dev/null -w "%{http_code}" http://127.0.0.1/health | grep -q "200" - 该 URL 返回 200,且其响应内容由 Apache 自身生成(例如通过
mod_status或自定义健康接口),才能证明 ServerName 对应的虚拟主机已加载、路由可达。 - 一旦检查失败,Keepalived 主动降优先级,触发 VIP 漂移,此时原节点的 Apache 即使还在运行,也不会再接收新流量,避免用户看到 503 或超时。
避免配置残留导致的“假切换”
主节点恢复后若自动抢回 VIP(配置了 nopreempt 除外),需确保其 Apache 配置与备机完全一致,尤其是:
- 所有
ServerName、ServerAlias项相同; - 没有仅在主节点启用的模块(如
mod_ssl缺失会导致 HTTPS 请求失败); - 文件权限、SELinux 上下文、证书路径等环境参数一致,否则 Apache 可能启动成功但无法加载虚拟主机,造成 VIP 已漂回却无法响应请求。










