应将维护页配置为最先定义的默认虚拟主机,监听相同端口且不设ServerName,DocumentRoot指向维护目录并授权访问,其余站点需明确指定ServerName和ServerAlias,HTTPS场景同理配置SSL证书并启用mod_ssl。

在系统升级期间,让所有站点统一显示维护公告页,关键不是逐个改 VirtualHost,而是用“默认虚拟主机 + 优先级控制”实现全局拦截。Apache 会把不匹配任何 ServerName 或 ServerAlias 的请求,自动交给第一个定义的
把维护页设为默认虚拟主机
在 httpd-vhosts.conf 或 sites-available 配置文件顶部,**最先定义**一个监听相同端口(如 *:80 或 *:443)的 VirtualHost 块,不设 ServerName,只设 DocumentRoot 指向维护页目录:
- DocumentRoot 必须指向真实存在的目录,例如 /var/www/maintenance
- 该目录下放一个 index.html,内容就是你的维护公告(含倒计时、联系方式等)
- 必须配好
权限,否则返回 403:
<Directory "/var/www/maintenance">
Require all granted
</Directory>
确保其他站点不抢走请求
后续所有业务站点的 VirtualHost 块,必须明确指定 ServerName 和 ServerAlias,并且不能遗漏任意一个要访问的域名。否则未被声明的域名请求会落到默认块,显示维护页——这正是你想要的效果,但需确认是主动控制,而非配置疏漏。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 检查每个站点配置里是否写了完整的 ServerAlias,比如 www.example.com、example.com、staging.example.com
- 避免使用通配符 ServerName * 或模糊写法,Apache 不支持
- 升级前可临时注释掉业务站点配置,只留默认维护块,验证是否全站生效
HTTPS 场景下同样适用
如果网站启用了 HTTPS,维护页也需支持 TLS。做法一样:在最前面加一个
- 务必启用 mod_ssl:a2enmod ssl(Debian/Ubuntu)或确认 httpd.conf 中 LoadModule 行未被注释
- SSL 配置项必须完整,否则 Apache 启动失败;可用 apachectl configtest 提前验证
- 若用 Let’s Encrypt,维护期间可先停掉 certbot 自动续订,避免证书更新干扰
升级完成后的快速切回
维护结束时,只需把业务站点的 VirtualHost 块顺序调到默认维护块之前,或直接禁用维护配置并 reload:
- Ubuntu/Debian:a2dissite maintenance.conf && systemctl reload apache2
- CentOS/RHEL:rm /etc/httpd/conf.d/maintenance.conf && systemctl reload httpd
- 无需重启 Apache,reload 即可生效,毫秒级切换

















