Nginx 实现域名跳转的几种方式
在日常项目中,我们经常会遇到这样的需求或情况:
- 访问
http://abc.com时,强制跳到https://www.abc.com,上面域名发生变化。 - 旧域名
old.com迁移到new.com,用户访问旧域名时需要自动跳转。 - 为了 SEO 统一入口,
abc.com和www.abc.com最终都要跳到同一个主域名。
对于域名跳转,可以在 Web 服务器层 实现,也可以在 应用层中 实现。下面主要讲解在 Web 服务层 Nginx 中的实现方式。
这些场景在 Nginx 中都可以很优雅地实现,如下:
1. 301 永久重定向(推荐 SEO 场景)
如果网站更换了域名,或者需要强制统一入口,可以用 301 永久重定向。
server {
listen 80;
server_name old.com;
# 永久重定向到新域名,并保留路径和参数
return 301 https://new.com$request_uri;
}
📌 说明:
301:告诉浏览器和搜索引擎,这是永久跳转,搜索引擎会更新索引。$request_uri:保留原路径和查询参数,比如/about?from=123。
示例效果:访问 http://old.com/about → 自动跳到 https://new.com/about
演示配置:本地项目跳转百度链接的 demo,实际项目中可以根据实际情况进行配置。
server {
listen 80;
server_name localhost;
# 永久重定向到新域名
return 301 https://www.baidu.com;
}
2. 302 临时重定向(推荐活动页/短链场景)
如果只是临时跳转(例如活动推广、临时域名),可以使用 302。
server {
listen 80;
server_name promo.old.com;
# 临时跳转,不会影响搜索引擎索引
return 302 https://event.new.com$request_uri;
}
📌 说明:
302:临时跳转,搜索引擎不会更新索引。- 常用于:活动页、营销短链。
3. 强制 HTTPS 跳转
为了保证安全,通常会把所有 HTTP 请求跳转到 HTTPS。
server {
listen 80;
server_name www.abc.com;
return 301 https://www.abc.com$request_uri;
}
📌 效果:访问 http://www.abc.com/login → 自动跳到 https://www.abc.com/login
4. 去掉或强制 www
很多公司会要求所有请求统一成 www.abc.com 或 abc.com,这样可以避免 SEO 重复收录。
去掉 www → 跳到裸域名
server {
listen 80;
server_name www.abc.com;
return 301 https://abc.com$request_uri;
}


