nginx临时故障跳转应使用return指令实现302重定向,因其性能高、逻辑清晰、不易出错,适用于整站、路径保留或特定路径跳转,需避免循环重定向并配合静态维护页提升用户体验。

临时故障页面跳转用 Nginx 302 重定向,核心是明确告诉浏览器和搜索引擎“只是暂时搬,别更新书签”,同时确保用户能立刻看到维护页或备用内容。
用 return 指令最简洁可靠
这是推荐方式,性能高、逻辑清晰、不易出错。适用于整站或特定路径临时跳转:
- 整站跳转到维护页(如 /maintenance.html):
server {
listen 80;
server_name example.com;
return 302 /maintenance.html;
} - 保留原始请求路径跳转(比如把所有请求临时导向新域名的对应路径):
server {
listen 80;
server_name old.com;
return 302 https://temp.new.com$request_uri;
} - 只对特定路径生效(如 /admin/ 下所有请求):
location /admin/ {
return 302 /under-maintenance.html;
}
注意避免循环重定向
302 跳转若配置不当,容易形成“自己跳自己”的死循环。常见原因包括:
- 目标地址仍匹配当前 server 或 location 块(例如跳转目标是 /maintenance.html,但该路径没静态文件,又触发了另一个 302)
- 多个重定向规则叠加(比如先 302 到 A,A 又被另一段配置 302 回 B)
- 用了 rewrite + redirect 且正则未排除目标路径(如 rewrite ^/(.*)$ /maintenance.html redirect; 会把 /maintenance.html 也再匹配一次)
验证方法:用 curl -I http://your-domain.com 查看响应头中 Location 是否稳定,状态码是否始终为 302,且不反复跳转。
配合静态维护页提升体验
单纯跳转 URL 不够友好,建议搭配一个轻量、可直接访问的 HTML 维护页:
- 把 maintenance.html 放在 Nginx root 目录下(如 /var/www/html/maintenance.html)
- 确保该路径不被其他 location 规则拦截或重写
- 页面里可加倒计时、预计恢复时间、联系方式等信息,避免用户困惑
不用 rewrite 的理由
除非需要基于复杂路径规则做动态改写(比如按年份分目录跳转),否则没必要用 rewrite 实现 302。因为:
- return 更快:不走正则匹配和变量替换流程
- 更安全:不会因 flag 标记(如 last/break)误用导致意外交互
- 更易读:一行指令即完成跳转,维护成本低











