nginx配置302临时跳转最稳妥,推荐用return 302加完整url;需保留路径时加$request_uri;路径映射用rewrite+redirect;后端返回302需proxy_intercept_errors配合error_page透传。

系统升级期间需要临时跳转,用 Nginx 配置 302 是最稳妥的做法——它明确告诉浏览器和搜索引擎“只是暂时搬个家”,原地址依然有效,不会影响 SEO 权重和用户书签。
明确用 return 302 实现简单跳转
这是最推荐的方式,语法简洁、执行优先级高、无正则开销:
- 在 server 块中直接写:
return 302 https://maintain.example.com/; - 保留原始路径(如 /admin → /admin)可加
$request_uri:return 302 https://maintain.example.com$request_uri; - 若只想跳首页(不带参数),去掉
$request_uri即可
用 rewrite + redirect 处理路径改写
当需要把旧路径映射到新路径结构时(比如 /old/* → /maintenance/*),用 rewrite 更灵活:
-
rewrite ^/(.*)$ /maintenance/$1 redirect;—— 临时跳转并改写路径 - 注意:末尾必须写
redirect(不是permanent),否则会变成 301 - 该指令放在 server 或 location 块内均可,但不能与 return 混用在同一作用域
配合 proxy_intercept_errors 处理后端返回的 302
如果升级页面由后端服务返回 302(例如 Spring Boot 返回跳转),而 Nginx 是反向代理,需额外配置:
- 在 location 块中启用:
proxy_intercept_errors on; - 同时定义 error_page 捕获状态码:
error_page 302 = @redirect_handler; - 再配一个命名 location:
location @redirect_handler { return 302 $sent_http_location; } - 这样能安全透传或重定向后端发来的跳转指令
避免踩坑的关键细节
302 看似简单,但几个细节错一点就失效:
- 别混用 return 和 rewrite:return 一执行就终止后续处理,rewrite 在同一上下文里会被跳过
-
不要漏掉协议和域名:写
return 302 /maintain.html是内部重写(非跳转),必须写完整 URL 如https://... - 测试时清空浏览器缓存:Chrome 对 301 缓存敏感,但 302 应每次发请求;若发现“跳不动”,先试隐身窗口
- 升级结束及时切回:302 不自动过期,务必人工恢复配置并 reload nginx











