Nginx 合并站点域名应使用 return 301 实现 SEO 友好的永久重定向:为旧域名配置独立或统一的 server 块,监听 80 或 443 端口,用 return 301 https://main.com$request_uri 保留路径与参数,并确保 DNS 解析正确、语法验证通过、响应头符合 301 规范。

合并站点域名时,Nginx 用 return 301 实现 301 重定向是最直接、高效且 SEO 友好的方式。核心思路是:为每个待合并的旧域名单独或统一配置一个监听 80(或 443)端口的 server 块,用 return 301 指令跳转到目标主域名,并完整保留路径和查询参数。
只用一个 server 块统一跳转多个旧域名
适合多个旧域名(如 old1.com、old2.com、www.old1.com)全部指向同一个新主域名(如 main.com)的场景:
-
监听 HTTP 流量:必须使用
listen 80;,不能混在 HTTPS 的 server 块里 -
列出所有旧域名:在
server_name后空格分隔所有需跳转的域名,例如old1.com old2.com www.old1.com -
跳转地址写法推荐:
return 301 https://main.com$request_uri;(协议固定为 https 更稳妥)
避免用$scheme,防止旧站走 HTTP 时跳转出 http://main.com
HTTPS 域名间跳转(比如 www → 无 www)
当主站已启用 HTTPS,还需规范访问入口(如强制访问 https://example.com,而非 https://www.example.com):
- 单独配一个
listen 443 ssl的 server 块,仅用于 www 版本 server_name www.example.com;- 在该块内加:
return 301 https://example.com$request_uri; - 确保这个 server 块中已正确配置
ssl_certificate和ssl_certificate_key
HTTP 全站自动升 HTTPS(配合域名合并)
如果旧域名只提供 HTTP 访问,而新主站只支持 HTTPS,建议额外配一个纯 HTTP 跳转块:
server { listen 80; server_name old1.com old2.com; return 301 https://main.com$request_uri; }- 这个配置和上面的 HTTPS 跳转不冲突,两者可共存
- 它确保所有 HTTP 请求第一时间跳到 HTTPS 主域名,避免中间环节出现明文传输
验证与避坑要点
配置后务必执行以下操作,否则可能跳转失败或被搜索引擎误判:
- 运行
nginx -t检查语法,确认无报错再nginx -s reload - 用
curl -I http://old1.com/path?x=1查看响应头:
状态码必须是HTTP/1.1 301 Moved Permanently,Location头要完整包含新域名 + 原路径 + 查询参数 - 浏览器测试时清缓存——301 会被强缓存,临时调试可用 302 替代验证逻辑
- 别漏掉 DNS 解析更新:所有旧域名的 A/AAAA 记录仍需指向当前服务器 IP,否则请求根本到不了 Nginx


















