用return 301是最直接高效的方式,需分设80和443端口独立server块,精确匹配server_name并保留$request_uri;https须配旧域名有效证书;多旧域名可合并至同一server块;跳转规则应抽离为独立文件include管理,并经nginx -t、reload及curl -i验证生效。

用 return 301 指令是最直接、高效且推荐的方式。它在 Nginx 请求处理早期就发出响应,不触发正则匹配或内部重写,性能高、逻辑清、SEO 友好。
HTTP 和 HTTPS 要分开配两个 server 块
旧域名的跳转不能混在新站配置里,必须独立监听 80 和 443 端口:-
HTTP 跳转(监听 80):
server {
listen 80;
server_name old.com www.old.com;
return 301 https://new.com$request_uri;
} -
HTTPS 跳转(监听 443):
server {
listen 443 ssl;
server_name old.com;
ssl_certificate /etc/ssl/certs/old.com.crt;
ssl_certificate_key /etc/ssl/private/old.com.key;
return 301 https://new.com$request_uri;
}
⚠️ HTTPS 块中的证书必须能验证 old.com,不能直接复用新站证书,除非它是通配符证书或 SAN 列表中包含该旧域名。
多个旧域名合并到一个新域名
不用为每个旧域名写单独的 server 块,把它们都列在 `server_name` 后面即可:server {
listen 80;
server_name old1.com www.old1.com old2.net;
return 301 https://new.com$request_uri;
}
Nginx 会自动匹配任意一个命中即跳转,维护简单,匹配效率也更高。
配置要抽离成独立文件管理
把跳转规则单独存为 `/etc/nginx/conf.d/redirects-old-to-new.conf`,内容就是上面的 server 块。然后在主配置的 `http { }` 块末尾加:include /etc/nginx/conf.d/redirects-old-to-new.conf;
这样改规则不用动主配置,测试时注释掉 include 行就能秒回滚,适合多人协作和生产环境。
验证是否生效的关键动作
- 运行 nginx -t 检查语法 - 执行 nginx -s reload(不是 restart) - 用 curl -I http://old.com/test?ref=abc 查看响应头:确认返回 HTTP/1.1 301 Moved Permanently,且 Location 头指向 https://new.com/test?ref=abc - 对 HTTPS 地址同样测试一次不复杂但容易忽略











