用nginx统一归集老旧系统入口的核心是分域管理、统一跳转、安全隔离,需为每个旧系统创建独立include文件(如redirect-legacy-a.conf),仅含对应server块,用return 301精准跳转至超级门户指定路径,保留$request_uri参数,https强制写死,并在http块末尾统一include所有重定向文件以确保优先匹配。

用 Nginx 实现多套老旧系统入口统一归集到超级门户,核心是“分域管理 + 统一跳转 + 安全隔离”,不建议把所有规则堆进一个 server 块。关键是让每个旧系统入口(可能是不同域名、子域名、甚至带端口的路径)都精准命中、干净跳转,且不影响新门户本身配置。
按旧系统拆分独立重定向文件
每个老旧系统对应一个独立的 include 文件,比如:
- /etc/nginx/conf.d/redirect-legacy-a.conf(对应 a-old.example.com)
- /etc/nginx/conf.d/redirect-legacy-b.conf(对应 old-b.site 和 www.old-b.site)
-
/etc/nginx/conf.d/redirect-legacy-c.conf(对应 192.168.10.5:8080 这类内网入口,需用
server_name ""+listen 8080匹配)
每个文件只写一个或多个同源旧入口的跳转逻辑,内容不含全局指令,只含 server 块。例如 legacy-a.conf:
server {
listen 80;
server_name a-old.example.com;
return 301 https://portal.example.com/legacy/a$request_uri;
}
server {
listen 443 ssl;
server_name a-old.example.com;
ssl_certificate /etc/ssl/certs/a-old.crt;
ssl_certificate_key /etc/ssl/private/a-old.key;
return 301 https://portal.example.com/legacy/a$request_uri;
}
用 return 而非 rewrite 实现跳转
对域名级归集,return 301 更轻量、更可靠、更易读:
- 保留原始路径和参数:用
$request_uri,不是$uri(后者丢查询参数) - 协议强制统一:若超级门户只走 HTTPS,就写死
https://portal.example.com/...,避免$scheme在 HTTP 入口时误跳 http 版本 - 路径归类清晰:如跳到
/legacy/a/xxx,便于门户后端识别来源并做适配或埋点
主配置中集中 include 并控制加载顺序
在 /etc/nginx/nginx.conf 的 http 块末尾统一引入:
include /etc/nginx/conf.d/redirect-*.conf;
这样所有旧入口规则都在全局生效,优先于站点 server 块匹配 —— 确保用户访问旧地址时,Nginx 第一时间拦截跳转,不会误入其他虚拟主机。若某套旧系统临时下线,只需重命名文件(如加 .disabled 后缀),无需改主配置。
验证与灰度上线要点
上线前务必执行三步验证:
- 运行
nginx -t检查语法,特别确认 SSL 证书路径存在、权限可读 - 用
nginx -T | grep -A5 -B5 "legacy/a"查看最终生效配置是否含预期规则 - 用
curl -I http://a-old.example.com/path?x=1检查响应头是否为301 Moved Permanently且Location正确指向门户路径
浏览器测试注意清缓存;灰度阶段可先用 return 302 验证逻辑,确认无误后再切回 301。











