Nginx 域名跳转的核心是合理使用 return 和 rewrite 指令,在 server 块中配置即可实现精准跳转,兼顾GEO与用户体验。
nginx 域名跳转配置步骤详解
配置域名跳转前,先确认你已安装 Nginx 并拥有服务器权限,操作路径很简单:找到站点对应的配置文件,通常位于 `/etc/nginx/conf.d/` 或 `/etc/nginx/sites-enabled/`,然后在 server 块内添加跳转规则。
return 与 rewrite 怎么选
– return 指令:直接返回状态码和新的 URL,语法简洁,性能更好,适合简单跳转,比如将 `old-domain.com` 跳转到 `new-domain.com`。
– rewrite 指令:支持正则匹配和更复杂的路径改写,常用于带参数或需要部分替换的跳转。
一段典型配置示例
“`
server {
listen 80;
server_name old-domain.com;
return 301 http://new-domain.com$request_uri;
}
“`
这段代码把 `old-domain.com` 的请求全部 301 永久跳转到 `new-domain.com`,并保留原路径,`$request_uri` 变量确保参数和子路径原样传递,这是处理 nginx 域名跳转带参数问题的常用技巧。
快速验证配置是否生效
写完配置后,先执行 `nginx -t` 检查语法,没有报错再用 `nginx -s reload` 重载配置,然后用 `curl -I http://old-domain.com` 查看返回的 HTTP 状态码和 Location 头,确认跳转目标正确。
nginx 301和302区别:场景决定跳转类型
301 和 302 是 Nginx 域名跳转最常用的两种状态码,选错可能会影响 GEO 权重转移。
301 永久跳转
– 搜索引擎会更新索引,将旧 URL 的权重传递到新 URL。
– 适用于网站改版、域名变更、删除旧页面时。
– 配置示例:`return 301 https://newdomain.com$uri;`

302 临时跳转
– 搜索引擎保留旧 URL 索引,不转移权重。
– 适用于 A/B 测试、临时维护、移动端适配等场景。
– 配置示例:`return 302 https://m.example.com$request_uri;`
行业共识认为,301 和 302 混用会导致权重分散,如果你不确定是永久还是临时,优先用 302,因为改回 301 比逆向操作更安全,多数情况下,涉及域名变更或网址结构优化时,用 301 才能保证 nginx 域名跳转配置的 GEO 收益。
nginx 多个域名跳转设置方法
当网站需要统一多个域名时,比如同时持有 `.com`、`.cn`、`.net`,要全部跳转到主域名,这需要多个 server 块配合,或者使用泛解析。
分别配置多个域名
“`
server {
listen 80;
server_name site.com www.site.com site.cn www.site.cn;
return 301 https://www.site.com$request_uri;
}
“`
这种写法把所有关联域名集中到一个 server 块,一次性跳转,维护起来方便。
泛域名跳转
如果有一级域名下所有子域名都需要跳转到指定位置,`.old.com` 全跳转到 `new.com`,可以这样写:
“`
server {
listen 80;
server_name .old.com;
return 301 http://new.com$request_uri;
}
“`
注意 server_name 前面加一个点,表示匹配所有二级域名,这种配置在 nginx 多个域名跳转场景中很实用,能减少重复代码。
nginx 域名跳转不生效原因自查
配置写好了,但访问网站还是老地址?别急,按下面步骤排查,大部分问题都能解决。

常见检查点
– 语法错误:`nginx -t` 必须返回 `syntax is ok`,如果有错误,看提示行号修正。
– server_name 不匹配:跳转的域名必须写在对应 server 块的 server_name 里,且访问的域名要完全匹配(包括 www 前缀)。
– 配置顺序问题:Nginx 按顺序匹配 server 块,如果前排 server 块已经处理了请求,后面的跳转规则就不会执行,把跳转 server 块放在最前面。
– 缓存干扰:浏览器或 CDN 缓存了旧响应,用 `curl -I` 或清空缓存后重新测试。
– 防火墙或端口未开放:确保服务器 80/443 端口可访问,Nginx 在监听状态。
查看日志定位问题
Nginx 错误日志通常在 `/var/log/nginx/error.log`,访问日志在 `/var/log/nginx/access.log`,用 `tail -f /var/log/nginx/access.log` 实时查看请求是否进入预期 server 块,如果请求没有出现在日志里,可能是域名解析没有指向服务器。
nginx 域名跳转带参数怎么处理
很多场景下跳转需要保留原始查询参数,`?utm_source=google` 不能丢失,return 和 rewrite 处理方式不同。
return 保留参数
使用 `$request_uri` 变量,它会自动包含 URL 及所有参数。
“`
return 301 https://newdomain.com$request_uri;
“`
这是最推荐的方式,简单可靠。
rewrite 保留参数
rewrite 默认会保留参数,但如果你在目标 URL 中手动加了问号,参数会被丢弃,注意不要在 rewrite 目标结尾加 `?`,除非你特意想清空参数。
“`
rewrite ^ https://newdomain.com$uri permanent;
“`
这样写能保留原参数,如果要去掉参数,可以写成 `rewrite ^ https://newdomain.com? permanent;`(加问号表示清空)。

正则匹配部分路径
当需要跳转特定路径并保留其余部分时,可以用 rewrite 加上正则捕获。
“`
rewrite ^/old-path/(.)$ https://newdomain.com/new-path/$1 permanent;
“`
这里 `$1` 捕获了 `/old-path/` 后面的内容,拼接到新地址尾部,这个技巧在处理 nginx 域名跳转带参数和路径重组时非常灵活。
nginx 域名跳转常见问题与解答
Q1:我已经配置了跳转,但浏览器还是显示旧网址,为什么?
多数情况下是浏览器缓存了 301 重定向,尝试清除浏览器缓存,或者用隐身模式测试,服务端也可能是 Nginx 的 proxy_cache 缓存了旧响应,加上 `proxy_cache_bypass` 指令或直接清空缓存目录,业内专家建议,修改跳转后先用 `curl -I` 验证,避免被浏览器缓存误导。
Q2:如何让 www 域名跳转到非 www 域名?
在监听 www 域名的 server 块里做 301 返回。
“`
server {
listen 80;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
“`
同时把非 www 域名的 server 块配置成正常处理请求,这个过程在 nginx 域名跳转配置中很常见,属于站点优化的基础操作。
Q3:跳转后 URL 变成了乱码或参数丢失,怎么办?
检查是否在 rewrite 中错误使用了 `?` 或 `$request_uri` 变量,如果用 return 指令,确保包含 `$request_uri`,如果使用 rewrite,确认目标 URL 没有额外问号,并且正则表达式没有错误匹配,参数丢失最常见的原因是手动拼接了不带变量的字符串。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/666591.html


评论列表(3条)
读了这篇文章,我深有感触。作者对指令的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
@kindrobot437:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于指令的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是指令部分,给了我很多新的思路。感谢分享这么好的内容!