Nginx可通过独立server块按域名快速切换维护页,无需停服改码:准备静态maintenance.html并设好权限;为待维护域名配置高优先级server块,用return 503+error_page统一返回;热重载生效,零中断。

当某个网站需要临时维护时,用 Nginx 基于域名快速切换到统一维护页,无需停服务、不改代码、不影响其他站点——关键在于复用 server 块逻辑 + 精确匹配域名 + 条件性返回维护页。
一、维护页文件准备与权限检查
把维护页面(如 maintenance.html)放在 Nginx 可读路径下,例如 /usr/share/nginx/html/maintenance.html。确保该文件: • 由 Nginx 工作进程用户(如 nginx 或 www-data)可读 • 不含动态内容,纯静态 HTML + CSS + 小图标即可 • 建议包含简短说明、倒计时或预计恢复时间(可后期用 JS 补充)
二、按域名配置独立 server 块(推荐方式)
为待维护的域名单独写一个 server 块,优先级高于主站配置(靠前加载),直接拦截全部请求:
server {
listen 80;
server_name example.com www.example.com;
return 503;
location / {
root /usr/share/nginx/html;
try_files /maintenance.html =503;
}
error_page 503 /maintenance.html;
}
注意: • return 503 触发错误页机制,配合 error_page 确保所有路径都返回维护页 • 不要用 rewrite 或 proxy_pass,避免绕过状态码 • 若启用了 HTTPS,需在对应 443 server 块中做同样配置
三、运行时热切换:启用/禁用仅需重载配置
维护开始时,把上述 server 块加入站点配置(如 /etc/nginx/conf.d/example-maint.conf);维护结束时删掉或注释该文件。执行:
- nginx -t 验证语法
- nginx -s reload 热重载(毫秒级生效,零中断)
无需重启 nginx 进程,也不影响同服务器上其他域名的正常访问。
四、进阶:同一域名下按请求特征条件启用维护页
如果只想对部分用户(如非内网 IP)、特定路径或 UA 屏蔽,可在主 server 块中用 if 判断:
set $maintenance "0";
if ($host ~* ^(example\.com|www\.example\.com)$) {
set $maintenance "1";
}
if ($remote_addr !~ ^(192\.168\.|10\.) ) {
set $maintenance "0"; # 仅对内网开放,外网返回维护页
}
if ($maintenance = "1") {
return 503;
}
error_page 503 /maintenance.html;
注意:if 在 location 外使用有局限,且不支持嵌套;更稳妥的方式是用 map 指令预定义变量,再结合 error_page 控制响应。











