Nginx 配置错误导致 TOO_MANY_REDIRECTS 的排查方法

TOO_MANY_REDIRECTS(过多重定向)是网站常见错误。这个问题会影响用户访问和 SEO 收录。本文会讲解 Nginx 配置错误导致 TOO_MANY_REDIRECTS 的排查思路与解决方案。

1. TOO_MANY_REDIRECTS 错误原理

浏览器访问网站时,如果服务器配置了错误的重定向规则,导致请求在多个 URL 之间无限跳转(例如 HTTP 与 HTTPS、带 www 与不带 www 之间相互跳转),最终浏览器为防止死循环,返回 TOO_MANY_REDIRECTS 错误。

常见表现:

页面加载失败,提示 ERR_TOO_MANY_REDIRECTS

F12 开发者工具 Network 面板显示重复的 301 或 302 重定向

2. 排查前的准备

在排查前,先确认以下信息:

网站使用的域名(是否有 www 与非 www 混用)

是否配置了 SSL(HTTPS)

是否使用了 CDN 或反向代理(如 Cloudflare)

3. Nginx 配置导致重定向错误的常见原因

3.1 HTTP 与 HTTPS 配置冲突

如果同时配置了 HTTP 自动跳转 HTTPS,而 HTTPS 配置又跳回 HTTP,会形成无限循环。

典型错误示例:

server {
listen 80;
server_name example.com;
return 301 http://example.com$request_uri; # 错误:跳转到 http
}

server {
listen 443 ssl;
server_name example.com;
return 301 https://example.com$request_uri;
}

此配置将 HTTP 请求重定向到 HTTP(自身),HTTPS 请求重定向到 HTTPS(自身),没有完成预期的 HTTP -> HTTPS 跳转。

3.2 www 与非 www 重定向配置错误

当 www 与非 www 互相跳转时,也会产生 TOO_MANY_REDIRECTS。

错误配置示例:

server {
server_name example.com;
return 301 http://www.example.com$request_uri;
}

server {
server_name www.example.com;
return 301 http://example.com$request_uri;
}

此配置会导致:

访问 example.com 跳到 www.example.com

访问 www.example.com 又跳回 example.com

无限循环

3.3 反向代理与 HTTPS 配置冲突

用了 Cloudflare、宝塔反向代理或 CDN 后,如果没配好 X-Forwarded-Proto 这个参数,Nginx 可能会认错网址协议(把 HTTPS 当成 HTTP),导致页面跳转出错。

解决方法:

在配置文件中添加:

配置文件通常在以下位置之一:

nginx / 打开 nginx.conf (主配置文件,不建议直接编辑 server 块)

server {
listen 80;
server_name example.com www.example.com;

set $https_off “”;
if ($http_x_forwarded_proto != “https”) {
set $https_off “redirect”;
}
if ($https_off = “redirect”) {
return 301 https://$host$request_uri;
}
}

或使用标准方式:

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

在 HTTPS 配置中加入:

server {
listen 443 ssl;
server_name example.com www.example.com;
# 配置 SSL 证书…
}

同时在 Nginx 全局配置 fastcgi_params 文件或 server 段内添加:

fastcgi_param HTTPS on;

确保反向代理传递了 HTTPS 信息。

4. 系统排查流程

下面是排查 TOO_MANY_REDIRECTS 的推荐步骤:

检查浏览器 Network 面板
查看跳转链路,确认是 HTTP 与 HTTPS 之间循环,还是 www 与非 www 之间循环。

查看 Nginx 配置文件是否存在多个 server_name 重复配置

是否 return 301 指向了相同域名导致循环

确认反向代理配置 如果使用了 Cloudflare,确认 “SSL/TLS 模式” 选择了 Full (strict),避免 Flexible 模式造成循环。

查看 WordPress 或其他 CMS 设置 若网站 URL 设置为 HTTP,但服务器配置了强制 HTTPS,也可能导致重复跳转。清除浏览器与 CDN 缓存 有时配置已修改,但缓存没有更新,还是显示旧的错误。

总结

TOO_MANY_REDIRECTS 是 Nginx 配置中常见问题,关键是 避免重定向循环。检查 HTTP 与 HTTPS、www 与非 www 配置,结合 Web 服务器、CDN 和应用设置排查,可以解决这类错误。

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注