临时重定向到维护页应使用302状态码,推荐用return 302指令(如return 302 /maintenance.html),避免rewrite引发循环或内部重写;可通过if判断开关文件实现启停控制,并用curl验证状态码与跳转。

临时重定向到维护页应使用 302 状态码,告诉浏览器和搜索引擎这只是短期行为,原 URL 仍有效。关键在于用 return 302 或 rewrite ... redirect,并确保不触发循环、保留必要路径信息(如需要)。
推荐用 return 指令直接返回 302
简洁、高效、不易出错,适合绝大多数维护场景:
- 在
server块中直接拦截全部请求,跳转到静态维护页(同域):return 302 /maintenance.html; - 若需跳转到外部域名的维护页(如备用站点):
return 302 https://status.example.com/maintenance.html; - 想保留原始请求路径(比如用于日志分析或调试),但又不实际转发内容,可加
$request_uri:return 302 https://status.example.com/maintenance.html?ref=$request_uri;
避免 rewrite 导致的常见陷阱
rewrite 默认在匹配后继续执行后续 location 规则,容易引发意外行为。若坚持用它做 302,必须显式加 redirect 标志:
- 正确写法(临时重定向整个站点):
rewrite ^/(.*)$ https://status.example.com/maintenance.html redirect; - 错误写法(缺标志 → 变成内部重写,不跳转):
rewrite ^/(.*)$ https://status.example.com/maintenance.html; - 禁止将域名自身重定向到自身路径(如
return 302 /maintenance.html在location /内),否则可能因未排除该路径而陷入重定向循环。
按条件启用维护重定向
真正实用的维护模式往往需要开关控制,而不是硬编码。常用方式是结合 if 和文件判断:
- 创建一个开关文件:
touch /etc/nginx/maintenance.on - 配置中检查该文件是否存在:
if (-f /etc/nginx/maintenance.on) { return 302 /maintenance.html; } - 这样只需增删文件即可启停维护页,无需重载 Nginx 配置。
验证是否生效
配置完成后 reload Nginx,并用 curl 快速确认状态码和跳转目标:
-
curl -I http://your-site.com/—— 应看到HTTP/1.1 302 Found和Location: ... - 打开浏览器访问,地址栏应保持原 URL(302 不强制更新地址栏),页面显示维护内容
- 检查搜索引擎不会把维护页当作新首页收录(302 不传递权重,符合预期)











