用 return 301 最直接高效,既能保证 SEO 权重传递又避免多余解析开销;需精确匹配 server_name、保持协议一致、保留 $request_uri;HTTPS 跳转须单独配置 443 server 块并提供有效证书;推荐将跳转规则抽离为独立配置文件并通过 include 引入;最后用 curl -I 验证响应头是否返回正确的 301 和 Location。

用 return 301 最直接高效,既能保证 SEO 权重传递,又避免多余解析开销。
基础单域名跳转(HTTP)
适用于旧站只走 HTTP 的简单场景。关键点是:server_name 必须精确匹配旧域名,且用 $scheme:// 保持协议一致:
- 监听 80 端口,设置
server_name old.com www.old.com - 一行指令完成跳转:
return 301 $scheme://new.com$request_uri; -
$request_uri自动保留路径、查询参数(如/about?ref=abc)
完整 HTTPS 支持(含 SSL 配置)
若旧域名本身有 HTTPS 访问,必须单独配置 443 server 块,并提供有效证书:
- 新增一个
server { listen 443 ssl; server_name old.com; }块 - 指定证书路径:
ssl_certificate /path/to/old.crt;和ssl_certificate_key /path/to/old.key; - 同样用
return 301 https://new.com$request_uri;(HTTPS 跳转建议固定写https://) - 注意:证书需覆盖
old.com,通配符或 SAN 多域名证书更稳妥
规则抽离管理(推荐生产环境)
把所有跳转逻辑从主配置中拆出来,便于测试、回滚和多站点复用:
- 新建独立文件,例如
/etc/nginx/conf.d/redirects-old-to-new.conf - 文件内只放
server块(不加任何全局指令),包含 HTTP + HTTPS 两组配置 - 在主配置的
http块末尾或站点配置顶部加入:include /etc/nginx/conf.d/redirects-old-to-new.conf; - 修改后执行
nginx -t && systemctl reload nginx验证并生效
验证是否生效
别只看浏览器跳转,重点检查响应头是否正确返回 301 和 Location:
- 终端执行:
curl -I http://old.com/about - 确认输出含:
HTTP/1.1 301 Moved Permanently和Location: https://new.com/about - 对 HTTPS 地址也做同样测试,确保两个端口都返回预期结果


















