nginx维护期间用302重定向最稳妥,推荐return指令实现全站或路径级跳转,支持ip白名单、参数保留及静态资源放行,确保维护页可访问且不循环跳转。

系统维护期间需要把用户临时引导到公告页,用 Nginx 配 302 重定向最稳妥——它明确告诉浏览器和搜索引擎“这只是暂时的”,原页面权重不会流失,后续恢复后也不用清理缓存。
直接返回 302 的方式(推荐)
用 return 指令最简洁、性能最高,适合全站或指定路径统一跳转:
server {
listen 80;
server_name example.com;
# 全站临时跳转到维护页(保留原请求路径参数)
location / {
return 302 /maintenance.html;
}
# 或只对特定路径跳转(比如 /admin /api 等核心入口)
location ~ ^/(admin|api|dashboard) {
return 302 https://$host/maintenance.html;
}
}
注意:/maintenance.html 要确保真实存在,且放在 root 指向的目录下(如 /usr/share/nginx/html/maintenance.html)。
按条件跳转(更灵活)
如果只想对部分用户(比如非管理员)跳转,可结合 $remote_addr 或自定义 header 判断:
location / {
# 白名单 IP 不跳转
if ($remote_addr != "192.168.1.100") {
return 302 /maintenance.html;
}
}
或者用 map 做更清晰的逻辑分离(避免在 location 中滥用 if):
map $remote_addr $should_maintain {
default 1;
192.168.1.100 0; # 运维IP放行
}
server {
location / {
if ($should_maintain) {
return 302 /maintenance.html;
}
}
}
跳转时保留原始 URL 参数(可选)
如果维护页需要记录来源,可在跳转地址中拼接 $args:
return 302 /maintenance.html?from=$uri&$args;
这样访问 /product?id=123 会跳到 /maintenance.html?from=/product&id=123,方便后续分析流量入口。
别漏掉静态资源和维护页本身
确保维护页及所需 CSS/JS 能正常加载,避免循环跳转:
location = /maintenance.html {
# 明确放行,不参与跳转逻辑
try_files $uri =404;
}
location ~ \.(css|js|png|jpg|gif)$ {
# 静态资源直接返回,不跳转
try_files $uri =404;
}
不复杂但容易忽略。











