nginx中旧域名全量301重定向应通过独立include文件管理,如/etc/nginx/conf.d/redirects-old-to-new.conf,内含http和https两个server块,分别监听80和443端口并配置对应ssl证书,主配置中用include指令引入,支持按域名分文件、通配加载及重命名禁用,确保清晰、安全、可测、易回滚。

直接把旧域名的全量 301 规则抽出来,用 include 单独管理,既清晰又安全——改规则不用动主配置,上线前还能单独测试,出问题也容易回滚。
准备一个独立的重定向配置文件
在 Nginx 配置目录下新建专门存放跳转规则的文件,比如:
- /etc/nginx/conf.d/redirects-old-to-new.conf(推荐路径,与站点配置同级)
- 内容只写跳转逻辑,不包含
server { ... }块外的任何指令 - 示例(将
old-site.com全量 301 到https://new-site.com):
server {
listen 80;
server_name old-site.com www.old-site.com;
return 301 https://new-site.com$request_uri;
}
server {
listen 443 ssl;
server_name old-site.com;
ssl_certificate /path/to/old.crt;
ssl_certificate_key /path/to/old.key;
return 301 https://new-site.com$request_uri;
}
注意:HTTPS 跳转必须配 SSL 证书,且证书要覆盖 old-site.com;若共用新站证书,确保该证书是多域名或通配符类型。
在主配置或站点配置中引入
打开你网站对应的配置文件(如 /etc/nginx/sites-available/your-site),在 http 块末尾或某个 server 块外部(但不能在 location 内)加入:
include /etc/nginx/conf.d/redirects-old-to-new.conf;
如果多个站点共用同一组跳转规则,可放在 http 块里;如果只针对某一站点,建议放在该站点的 server 块之前(即同级位置),避免被其他 server 块覆盖。
验证与生效
执行三步检查,缺一不可:
- 运行
nginx -t确认语法无误,特别留意 include 路径是否存在、权限是否可读 - 检查
nginx -T输出,确认 include 的内容已实际加载进最终配置 - 执行
nginx -s reload生效,不要用 restart,避免服务中断
生效后可用 curl -I http://old-site.com/test 查看响应头是否含 Location: https://new-site.com/test 和 301 Moved Permanently。
进阶建议:按域名分文件 + 自动启用开关
当有多个旧域名需跳转时,更推荐为每个域名建独立文件:
/etc/nginx/conf.d/redirect-old1.conf/etc/nginx/conf.d/redirect-old2.conf
然后统一用通配 include:include /etc/nginx/conf.d/redirect-*.conf;
禁用某条规则时,只需重命名文件(如加 .off 后缀),无需删代码或注释,下次 reload 就自动失效。











