Nginx用root配置维护页的核心是:在location中设return 503触发错误,配合error_page 503 /maintenance.html映射,并用location = /maintenance.html { root /var/www/html; internal; }指定静态文件路径且禁止直接访问。

用 root 指令配置维护页,核心是让 Nginx 在特定条件下(比如后端宕机或主动维护)把请求导向一个本地静态 HTML 文件,而不是转发给不可用的服务。关键不在于“替换 root”,而是在 location 块中正确设置 root 路径,并配合 error_page 或 return 触发跳转。
直接返回 503 + 显示维护页(全站临时下线)
适用于计划内维护,所有外部访问都看到同一页面:
- 在 server 块中添加:
location / {<br> return 503;<br>} - 紧接着定义维护页位置:
location = /maintenance.html {<br> root /var/www/html;<br> internal;<br>} - 再加一条错误页映射:
error_page 503 /maintenance.html;
注意:root /var/www/html 表示 Nginx 会去该目录下找 /maintenance.html,即完整路径是 /var/www/html/maintenance.html。确保这个文件真实存在。
拦截后端故障自动显示维护页(502/503/504)
适合后端服务意外挂掉时自动兜底,不影响正常配置逻辑:
- 在 proxy 相关的 location 块里启用错误拦截:
proxy_intercept_errors on; - 声明哪些状态码触发自定义页面:
error_page 502 503 504 /maintenance.html; - 单独配置维护页的 location:
location = /maintenance.html {<br> root /var/www/html;<br> internal;<br>}
此时 root 的作用是告诉 Nginx:当它内部重定向到 /maintenance.html 时,去哪找这个文件。“internal” 确保用户不能直接通过 URL 访问该页面,只能由 Nginx 内部跳转调用。
root 路径容易出错的几个细节
root 后面的路径必须是绝对路径;它和 URI 拼接的方式是“原样拼接”,不删减也不补斜杠:
- 如果写
location /static/ { root /data; },那么请求/static/js/app.js对应磁盘路径是/data/static/js/app.js - 如果维护页放在
/opt/pages/maint.html,就该写root /opt/pages;,而不是/opt/pages/maint.html - 不要和
alias混用 ——alias会替换掉匹配的 URI 前缀,root不会
验证与生效
改完配置后别忘了检查和重载:
- 检查语法:
sudo nginx -t - 重载配置:
sudo nginx -s reload - 测试方式:临时停掉后端服务,看是否返回维护页;或用 curl 模拟 502:
curl -I http://your-domain.com


















