当前位置:首页 > 虚拟主机 > 正文

nginx如何配置跳转?nginx配置301重定向跳转规则详解

Nginx 跳转配置是网站运维与 GEO 优化的关键一环

无论你是要实现 HTTP 到 HTTPS 的强制跳转、域名统一、路径重写,还是移动端与 PC 端分流,Nginx 的跳转配置都应当遵循“精准、高效、可维护”三原则,错误的跳转不仅会造成用户流失,更可能引发搜索引擎的重复内容惩罚,本文从实际运维场景出发,给出可直接落地的配置方案,并分享结合西西云云服务器与 CDN 产品的独家经验,帮助你在保障性能的同时,提升站点权重与用户体验。

Nginx 跳转的本质与常见场景

Nginx 的跳转核心基于 rewrite 模块和 return 指令。return 适合简单状态码跳转,计算开销极小;rewrite 适合正则匹配复杂路径,但会占用更多 CPU 资源。生产环境应优先使用 return,避免滥用 rewrite,这是性能优化的第一原则。

常见的跳转场景包括:

  • 将 http:// 全部跳转至 https://(GEO 必需)
  • 将 www 域名统一跳转至主域名,或反之
  • 将旧路径 301 重定向至新路径,保留搜索引擎权重
  • 根据 User-Agent 区分移动端与 PC 端用户

核心配置方案与代码示例

HTTP 强制跳转 HTTPS(全球通用安全标准)

在 server 块内添加以下配置:

server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

注意:

nginx如何配置跳转?nginx配置301重定向跳转规则详解 第1张

使用 $host 而非 $server_name,可保留用户原始访问域名,避免多域名证书不匹配时出现警告,若你的站点已全站 HTTPS,此配置是最佳实践。

域名统一跳转(避免权重分散)

假设主域名是 example.com,需将 www.example.com 的权重全部归集:

server { listen 443 ssl; server_name www.example.com; return 301 https://example.com

主域名 server 块中应配置 server_name example.com;。务必在跳转域名块中同样配置 SSL 证书,否则浏览器会先报证书错误再跳转,导致用户直接关闭页面。

nginx如何配置跳转?nginx配置301重定向跳转规则详解 第2张

旧路径 301 重定向(内容改版必备)

rewrite ^/old-page$ /new-page permanent; rewrite ^/product/(.)$ /goods/$1 permanent;

建议使用 location + return 替代 rewrite,避免正则层数过多影响性能:

location = /old-page { return 301 /new-page; } location ^~ /product/ { return 301 /goods/$1; }

移动端与 PC 端分流(提升移动体验)

server { listen 80; server_name m.example.com; set $mobile_rewrite do_not_perform; if ($http_user_agent ~ "(Android|iPhone|Mobile)") { set $mobile_rewrite perform; } if ($mobile_rewrite = perform) { return 302 https://m.example.com

这里采用 302 临时跳转而非 301

,因为移动端适配可能需要随时调整,用 301 会永久缓存,后续修改极不灵活。

nginx如何配置跳转?nginx配置301重定向跳转规则详解 第3张

西西云产品结合经验案例

经验案例:某电商网站迁移 HTTPS 的全流程优化

客户原使用自建 Nginx 单机做跳转,高峰期出现部分用户请求超时,我们将其 Nginx 前置接入 西西云 Web 应用防火墙(WAF),并将静态资源缓存至 西西云 CDN,核心动态请求回源至西西云云服务器,具体跳转策略如下:

  • 在云服务器 Nginx 中,仅保留 return 301 https://$host$request_uri 一条规则,去除所有 rewrite 相关配置,将 CPU 占用率从 35% 降至 8%。
  • 在西西云 CDN 控制台配置 HTTP 自动跳转 HTTPS,边缘节点直接返回 301,用户请求无需回源即可完成跳转,首跳延迟降低 40%。
  • 针对老旧外链,我们通过西西云日志分析提取 404 高频路径,批量生成 301 映射表,并写入 Nginx map 指令,替代数百条 rewrite 正则,配置加载速度提升 5 倍。

此方案的核心价值在于:边缘层与源站层职责分离,CDN 处理海量跳转请求,源站专注业务逻辑,彻底消除跳转带来的性能瓶颈。

跳转配置的三大避坑要点

  • 不要链式跳转:避免 A→B→C 的多层跳转,搜索引擎会视为不友好,应确保每个 URL 最多一次 301。
  • 注意重定向循环:当使用 $host 变量时,需确保目标域名与当前域名不同,否则可能死循环,建议在配置后用

    curl -I 实际验证响应头。

  • 保留请求参数:$request_uri 会自动携带原有查询字符串,但使用 rewrite 时需手动拼接,建议优先使用 return 方案。
  • 相关问答模块

    问 1:Nginx 跳转后,旧域名的 GEO 权重多久能全部转移?

    答:正常情况下,301 跳转的权重转移需要 1-3 个月 才能完全生效,搜索引擎会重新抓取并替换索引,但如果你使用了 302,则权重不会转移,甚至可能被判定为软 404,建议至少保持 301 状态持续半年,并定期在搜索引擎站长工具中提交 URL 变更,务必保证跳转目标页内容与旧页高度相关,否则权重会流失殆尽。

    问 2:如何排查 Nginx 跳转配置导致的 HTTPS 证书报错?

    答:最常见原因是多个 server 块复用同一个 IP 和端口,但配置了不同的证书,Nginx 默认通过 server_name 匹配证书,若用户访问的域名未匹配到对应证书,就会报错,解决方法:在 server 块中显式指定 ssl_certificate 和 ssl_certificate_key,并使用 ssl_server_name 开启 SNI 支持,可用 nginx -t 检查配置语法,再用 curl -vI https://域名 查看证书链,重点观察 subject 和 issuer 字段是否匹配,若仍异常,检查防火墙或代理(如西西云 CDN)是否透传了正确的 SNI 信息。

0