使用 Nginx return 302 实现临时维护跳转,确保访客看到维护页、搜索引擎识别为临时状态;配置需简洁(如 location / { return 302 /maintenance.html; }),维护页须真实存在并可访问,避免带参跳转和缓存问题。

临时维护跳转用 Nginx 302 重定向,核心是让访客看到维护页,同时明确告诉搜索引擎“这只是暂时的”,避免影响原页面的收录和权重。
明确使用 return 302(推荐)
最简洁、最可靠的方式是用 return 指令,直接返回状态码和目标路径:
- 它不依赖正则匹配,性能高,逻辑清晰
- 不会被浏览器长期缓存,每次访问都重新请求服务器,确保维护结束能及时恢复
- 搜索引擎会保留原 URL 的索引和排名,不转移权重
示例配置(将所有请求临时跳转到维护页):
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;"># 所有请求都跳转到 /maintenance.html
location / {
return 302 /maintenance.html;
}
# 维护页本身不跳转,正常返回
location = /maintenance.html {
root /var/www/html;
try_files $uri =404;
}}
只对特定路径或条件做跳转
如果只需在某些情况下触发(比如仅限非管理员 IP 或特定时间段),可以用 if 判断 + return 302:
- 注意:if 在 location 外部使用需谨慎,优先放在 server 块内
- 避免嵌套复杂逻辑,简单判断足够满足维护场景
示例(仅当请求路径包含 /admin 时跳转):
location /admin {
return 302 /maintenance.html;
}
或限制 IP(如只让运维人员访问):
if ($remote_addr != "203.0.113.42") {
return 302 /maintenance.html;
}
保留原始请求参数?通常不需要
维护跳转的目标是统一提示页,不建议保留 $request_uri:
- 跳转到 /maintenance.html 就够了,带参数反而可能暴露内部路径
- 若误用
return 302 https://example.com/maintenance.html$request_uri,会导致 URL 变成/maintenance.html?next=/login这类冗余形式 - 维护页本身应独立设计,无需依赖原请求上下文
配合静态维护页一起部署
302 是跳转指令,但最终要能展示内容。确保:
-
/maintenance.html文件真实存在,放在 Nginx 的 root 目录下 - 该文件可直接通过浏览器访问(测试
curl http://example.com/maintenance.html) - 必要时加简单样式和倒计时文案,提升用户体验
不复杂但容易忽略。











