nginx 通过独立高优先级 server 块实现单站点维护页“一键切换”:为待维护域名(如 shop.example.com)新建 conf.d/shop-maint.conf,含精确匹配的 80/443 server 块,return 503 + error_page 指向 maintenance.html;启用/停用仅需增删该文件并 reload,不改主配置、不影响其他域名。

用 Nginx 的 server 块实现在线维护页“一键切换”,核心是**不改主站配置、不 reload 全局、不影响其他域名**,只通过增删独立 server 块来控制单个站点的维护状态。
单独为维护域名建高优先级 server 块
为待维护的域名(如 shop.example.com)新建一个配置文件,例如 /etc/nginx/conf.d/shop-maint.conf,内容如下:
- 监听相同端口(80 或 443),
server_name精确匹配目标域名 - 把该块放在所有其他配置之前(或用
include加载时确保顺序靠前),Nginx 会优先匹配它 - 用
return 503触发错误机制,再配合error_page 503 /maintenance.html统一返回页面 - 确保
/maintenance.html文件存在且 Nginx 进程可读(如放在/usr/share/nginx/html/下)
HTTPS 站点需同步配置 443 server 块
如果原站启用了 HTTPS,仅配 80 端口无法拦截加密请求。必须额外添加一个对应的 443 server 块:
- 包含有效的 SSL 证书路径(可复用原站证书)
-
server_name保持一致 - 逻辑与 HTTP 块完全相同:return 503 + error_page 指向维护页
- 避免写
proxy_pass或rewrite,防止绕过 503 状态码
启用/停用只需重载一次配置
切换动作本身极轻量:
- 开启维护:把维护专用的
.conf文件放入conf.d/目录(如touch /etc/nginx/conf.d/shop-maint.conf) - 关闭维护:移除或注释该文件(如
rm /etc/nginx/conf.d/shop-maint.conf) - 执行
nginx -t && nginx -s reload—— 所有变更即时生效,零连接中断
配套建议提升体验
让维护页更友好、更可控:
- 在维护页 HTML 中加入
<meta http-equiv="refresh" content="30">,提示用户自动刷新重试 - 响应头里加
add_header Retry-After "60";,告诉爬虫或客户端稍后再试 - 维护页中写明预计恢复时间(可用 JS 动态渲染倒计时,不依赖后端)
- 权限检查别遗漏:确认
maintenance.html属于nginx用户且权限为644










