直接用 return 301 实现旧域名到新域名的永久跳转,配置简洁高效;需在 server 块中设置旧域名、用 $scheme:// 或 https:// 拼接新地址并保留 $request_uri,支持多域名合并跳转,配置后须重载 nginx 并用 curl 验证响应头。

直接用 return 301 就能完成旧域名到新域名的永久跳转,配置简洁、性能高,是推荐做法。
基础写法:整个域名跳转
在 server 块中监听旧域名,用 return 直接返回新地址:
- 确保
server_name设置为旧域名(如old-site.com或带 www 的变体) -
return 301后拼接新域名,加上$request_uri保留原始路径和查询参数 - 协议部分建议用
$scheme,这样 HTTP 和 HTTPS 请求都能正确跳转
示例配置:
server {
listen 80;
server_name old-site.com www.old-site.com;
return 301 $scheme://new-site.com$request_uri;
}
HTTPS 场景下注意协议一致性
如果新站只支持 HTTPS,旧站却走 HTTP,直接用 https:// 更稳妥:
- 避免因
$scheme是 http 而跳转到 http 版本 - 尤其当旧站没配 HTTPS 证书时,
$scheme会是 http,但新站可能强制 https
推荐写法:
server {
listen 80;
server_name old-site.com;
return 301 https://new-site.com$request_uri;
}
多域名统一跳转到一个主域
多个旧域名指向同一新域名,可合并到一个 server 块:
- 把所有需要跳转的域名都列在
server_name后,空格分隔 - 只需一份 return 指令,Nginx 自动匹配任意一个域名命中即生效
例如:
server {
listen 80;
server_name old1.com old2.com www.old1.com;
return 301 https://main-site.com$request_uri;
}
验证与注意事项
配置后需重载 Nginx 并测试效果:
- 执行
nginx -t检查语法,再nginx -s reload - 用 curl -I 访问旧域名,确认响应头含
HTTP/1.1 301 Moved Permanently和正确的Location - 浏览器访问时注意清缓存——301 会被浏览器长期缓存,测试阶段可临时改用 302 验证逻辑
- 别忘了同步更新 DNS 和 SSL 证书(如果新域名需要 HTTPS)











