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 和应用设置排查,可以解决这类错误。