Apache可通过Include指令动态加载maintenance.conf实现一键维护切换:定义MAINTENANCE开关,配合IfDefine、RewriteRule与503状态码重定向至维护页,reload即可生效,无需重启服务。

Apache 可以通过 Include 指令配合外部配置文件,实现“一键切换”维护页面,无需每次修改主配置或重启服务。核心思路是:把维护开关和页面重定向逻辑抽离到独立文件,用 Include 动态加载,再结合简单的条件判断即可生效。
准备一个独立的维护配置文件
在 Apache 配置目录下(如 /etc/httpd/conf/ 或 /usr/local/apache2/conf/)新建一个文件,例如 maintenance.conf:
- 内容只需几行,定义是否启用维护、目标提示页路径及重定向规则
- 推荐使用绝对路径指向一个简洁的 HTML 提示页(如
/var/www/maintenance.html) - 确保该 HTML 文件已存在且可被 Web 用户访问
在主配置中插入 Include 指令
打开 httpd.conf 或虚拟主机配置文件(如 httpd-vhosts.conf),在 <virtualhost></virtualhost> 块内或全局作用域合适位置添加:
Include conf/maintenance.conf
注意:conf/ 是相对于 ServerRoot 的路径;若放在其他位置(如 /etc/httpd/conf.d/),需写完整路径或确认 Apache 有读取权限。
维护配置文件的内容示例
maintenance.conf 可这样写(支持 Apache 2.4+):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
# 维护开关:设为 "on" 启用,"off" 关闭
Define MAINTENANCE on
<p><IfDefine MAINTENANCE></p><h1>所有请求重定向到维护页(除维护页自身和静态资源)</h1><pre class="brush:php;toolbar:false;">RewriteEngine On
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|gif|ico)$ [NC]
RewriteRule ^(.*)$ /maintenance.html [R=503,L]
Header always set Retry-After "3600"
说明:
-
Define MAINTENANCE on是开关变量,改成off即停用维护模式 -
RewriteRule使用503 Service Unavailable状态码,符合维护语义,搜索引擎会理解为临时不可用 -
Retry-After告诉爬虫一小时后再尝试,利于 SEO 友好 - 排除
.html和常见静态资源后缀,避免维护页样式丢失
生效与验证
保存所有更改后,执行以下操作:
- 运行
apachectl configtest或httpd -t检查语法是否正确 - 无需完全重启,用
systemctl reload httpd(CentOS/RHEL)或sudo service apache2 reload(Debian/Ubuntu)热加载配置 - 访问任意站点路径,应跳转至
/maintenance.html;改MAINTENANCE off并 reload 后即恢复正常

















