302重定向最适合临时停机维护,应使用return 302带协议域名的完整URL实现;rewrite需加redirect标志;可通过maintenance.flag文件动态开关;务必测试响应头、跳转及资源加载。

当服务器需要临时停机维护时,用 302 重定向是最合适的选择——它明确告诉浏览器和搜索引擎“只是暂时的”,不会影响 SEO 权重,也不会被长期缓存。
使用 return 指令实现全站 302 重定向
这是最简洁、高效的方式,推荐优先使用。它直接返回状态码,不触发后续 location 匹配,性能好且逻辑清晰。
- 在 server 块中添加一行:return 302 https://yourdomain.com/maintenance.html;
- 确保目标页面(如 maintenance.html)已部署在可公开访问的路径下,比如放在 Nginx 的 root 目录或另一个可访问域名下
- 如果维护页在同一域名下,建议用完整 HTTPS 地址,避免协议或路径歧义
- 注意:不要写成 return 302 /maintenance.html; —— 这是内部重定向,浏览器地址栏不变,用户看不到通知页;必须是带协议+域名的外部跳转地址
用 rewrite 实现相同效果(兼容旧配置习惯)
如果你习惯用 rewrite,也可以达到目的,但需注意 flag 的选择。
- 写法示例:rewrite ^/(.*)$ https://yourdomain.com/maintenance.html redirect;
- redirect 是关键 flag,它等价于 302,浏览器会跳转并显示新 URL
- 正则 ^/(.*)$ 匹配所有请求路径,包括根路径和子路径,保证全覆盖
- 避免使用 permanent(对应 301),否则搜索引擎可能误判为永久下线
按条件启用维护重定向(更灵活)
实际运维中,常需快速开关维护模式,而不改配置文件。可通过变量或文件存在性判断实现。
- 在 http 块顶部定义一个开关:set $maintenance off;(或通过 include 引入外部开关文件)
- 在 server 块中加入判断:if (-f /var/www/maintenance.flag) { return 302 https://yourdomain.com/maintenance.html; }
- 维护时只需创建空文件 /var/www/maintenance.flag,重启或重载 Nginx 即生效;移除文件即可恢复服务
- 注意:if 在 location 外部使用有局限,推荐放在 server 块顶层,且仅用于简单文件判断
验证与注意事项
配置完成后,务必测试行为是否符合预期。
- 用 curl 测试:curl -I http://yourdomain.com/,确认响应头含 Location: 和 302 Found
- 打开浏览器访问任意路径,应立即跳转到维护页,地址栏显示目标 URL
- 检查维护页能否正常加载(JS/CSS 资源路径是否正确,避免相对路径导致 404)
- 避免循环:切勿将维护页设为同域名下的 /maintenance.html 并用 rewrite 匹配自身,否则可能触发重定向环


















