通过文件触发实现Nginx维护页一键开关:在server块顶层用if(-f /path/to/maintenance.flag)判断,命中则return 302至完整HTTPS维护页URL;静态资源须用绝对或根路径,并配置location放行/static等目录;运维仅需touch/rm标志文件即可启停,上线前须验证302跳转、地址栏变更及资源200加载。

生产服务器出故障时,需要快速启用维护页面,同时避免修改配置、重启服务——核心是“一键开关”,靠文件触发,不改 Nginx 配置本身。
用 return + 文件判断实现零配置切换
在 server 块顶层(不在 location 内)加入条件判断:
- 先定义一个开关机制:用 if (-f /path/to/maintenance.flag) 检测文件是否存在
- 匹配成功即执行 return 302 https://yourdomain.com/maintenance.html
- 目标页必须是完整 HTTPS 地址,不能写成
/maintenance.html(否则是内部重定向,地址栏不变) - 确保
maintenance.html已部署在 Web 可访问路径下(如 Nginx root 目录或独立静态域名)
维护页资源要能独立加载
用户跳转过去,页面不能白屏。关键点:
- CSS/JS/图片等资源用绝对路径或根路径(
/css/app.css),别用相对路径(./css/app.css),否则在任意 URL 下跳转后可能 404 - 如果维护页放在同域名下,建议把它的所有静态资源也统一放至
/static/或类似固定前缀目录,避免路径歧义 - 可加一条 location 规则专门放行静态资源,防止被重复重定向干扰:
location ~ ^/(static|images|css|js)/ { }
一键开启/关闭的终端命令
运维人员只需执行两行命令,无需编辑配置、无需 reload:
- 开启维护:touch /var/www/maintenance.flag
- 关闭维护:rm /var/www/maintenance.flag
- 注意路径需与 Nginx 配置中
-f后的路径完全一致;推荐用绝对路径,避免权限或上下文问题
务必验证三件事
上线前跑一次检查,避免跳转失败或循环:
- 用
curl -I http://yourdomain.com看响应头是否含Location:和302状态码 - 浏览器访问任意路径(如
/api/v1/users),确认跳转后地址栏变为维护页 URL,且页面完整显示 - 打开维护页里的开发者工具 → Network 标签,确认所有资源状态码都是 200,无 404


















