一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中 301 重定向如何在服务器迁移时平滑过渡老旧客户端请求

时间:2026-08-22 20:47:50 编辑:袖梨 来源:一聚教程网

Nginx 301重定向实现平滑迁移需分三步:域名整体迁移用独立server块+return 301原样映射;路径调整用location+return或rewrite精准跳转;兼容旧请求需处理后缀、大小写等细节,并通过配置分离、语法检查与多场景测试确保生效。

Nginx 301 重定向在服务器迁移中要实现平滑过渡,关键是让每个旧请求精准、无损地抵达对应的新地址,既不丢参数,也不跳首页,更不能循环或降级协议。

域名整体迁移:用独立 server 块 + return 301

这是最常用也最稳妥的方式。旧域名所有流量(含路径和查询参数)必须原样映射到新域名对应位置。

  1. 在 Nginx 配置中新建两个独立 server 块,分别监听 80443 端口
  2. server_name 列出全部旧域名,比如 old.com www.old.com old.net
  3. return 301 目标写死新地址,例如 https://new.com$request_uri
  4. HTTPS 块必须配旧域名有效的 SSL 证书(通配符或 SAN 多域名证书更稳妥)

这样用户访问 http://old.com/product?id=7https://www.old.com/blog/2024/,都会分别跳转为 https://new.com/product?id=7https://new.com/blog/2024/,路径与参数毫发无损。

路径结构调整:用 location + return 或 rewrite

当新旧站点同域但目录变了(如 /news//blog/),适合在新站的 server 块内配置:

  1. 单页精确跳转:

    location = /old-contact.html {return 301 /contact/;}
  2. 目录批量迁移:

    location ^~ /news/ {rewrite ^/news/(.*)$ /blog/$1 permanent;}

注意:permanent 是 rewrite 的 301 标志;location ^~ 比正则匹配更快,适合前缀类迁移。

保留客户端兼容性:特别处理常见旧请求

老旧客户端(如某些爬虫、APP 内嵌 WebView 或 IE8+)可能带特殊参数、大小写混用、或访问 .php 后缀页面。可针对性补规则:

  1. 强制统一后缀:

    location ~ .php$ {rewrite ^(/.*?)(?:.php)(?.*)?$ $1$2 permanent;}
  2. 兼容大小写与分隔符:

    rewrite ^/category/([a-z0-9_-]+)$ /categories/$1 permanent;
  3. 若新版 slug 无法预知(如数据库动态生成),先跳无 slug 版本,由后端二次跳转,避免 404。

配置管理与上线前验证

  1. 把所有跳转规则抽成单独文件(如 /etc/nginx/conf.d/redirects.conf),用 include 引入主配置
  2. 修改后必执行:nginx -t 检查语法 → nginx -s reload 生效(不中断服务)
  3. 测试三类请求:
    1. curl -I http://old.com/test?ref=abc:确认返回 301 Moved Permanently 和正确 Location
    2. 访问含中文、特殊符号、长参数的 URL,看是否完整透传
    3. 用浏览器无痕模式测试,避免本地 301 缓存干扰

不复杂但容易忽略。

热门栏目