Nginx 通过 include 独立维护配置文件实现“一键切换”维护页,不改动主配置、零中断;需准备 maintenance.html 文件并设好权限,编写含 80/443 server 块的专用配置,用命名或显式 include 控制加载顺序,启停仅需创建或删除配置文件后 reload。

用 include 配合独立维护配置文件,是 Nginx 实现“一键切换”维护页最干净、最安全的方式。它不改动主站配置,不影响其他域名, reload 一次即生效,真正零中断。
准备维护页面文件
把静态 HTML 文件(如 maintenance.html)放在 Nginx 可读路径下,常见位置:
/usr/share/nginx/html/maintenance.html- 或和主站同级的目录,比如
/var/www/example.com/maintenance.html
确保该文件:
- 属主为 Nginx 工作用户(如
nginx或www-data) - 权限为
644(chmod 644 maintenance.html) - 内容简洁清晰,可含倒计时、预计恢复时间、联系方式等
编写独立的维护 server 块配置
新建一个专用配置文件,例如:/etc/nginx/conf.d/example-com-maint.conf,内容如下:
server {
listen 80;
server_name example.com www.example.com;
return 503;
error_page 503 /maintenance.html;
location = /maintenance.html {
root /usr/share/nginx/html;
internal;
}
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 503;
error_page 503 /maintenance.html;
location = /maintenance.html {
root /usr/share/nginx/html;
internal;
}
}
关键点:
- 两个
server块分别监听80和443,覆盖 HTTP/HTTPS 全部流量 -
server_name必须精确匹配目标域名,不能用通配符 -
return 503主动触发错误,再由error_page统一导向维护页 -
location = /maintenance.html加internal,防止用户直接访问该路径绕过逻辑
通过 include 控制加载顺序与启用状态
Nginx 默认会按字母顺序加载 conf.d/*.conf,所以要让维护配置优先于主站配置,有两类做法:
-
命名控制:把文件名设为
00-maint-example.com.conf,确保它排在10-example.com.conf之前 -
显式 include:在主配置
nginx.conf的http{}块开头手动加一行:include /etc/nginx/conf.d/*-maint.conf;
再把所有维护配置统一放在-maint.conf后缀下,便于集中管理
启用/停用只需两步:
- 开启维护:
touch /etc/nginx/conf.d/example-com-maint.conf - 关闭维护:
rm /etc/nginx/conf.d/example-com-maint.conf - 执行:
nginx -t && nginx -s reload,立即生效
增强体验的小建议
在维护 server 块中加入这些指令,更规范、更友好:
-
add_header Retry-After "300";—— 告诉爬虫或客户端 5 分钟后再试 -
add_header Cache-Control "no-store, no-cache, must-revalidate";—— 防止浏览器缓存维护页 - 在
maintenance.html中加入:<meta http-equiv="refresh" content="60">—— 提示用户自动刷新 - 避免使用
rewrite或proxy_pass,否则可能绕过503状态码


















