ERR_TOO_MANY_REDIRECTS本质是浏览器陷入重定向死循环,主因是Nginx反向代理未透传X-Forwarded-Proto头导致后端误判协议,需配置proxy_set_header X-Forwarded-Proto $scheme并确保后端信任该头。

重定向死循环(ERR_TOO_MANY_REDIRECTS)多数源于后端应用误判客户端协议:用户访问的是 HTTPS,但 Nginx 反向代理以 HTTP 转发给后端,导致后端反复发起 301 到 HTTPS 的跳转。解决核心是让后端准确知道“用户最初用的是 HTTPS”,而 proxy_set_header X-Forwarded-Proto $scheme 就是打通这一链路的关键指令。
必须透传 X-Forwarded-Proto 头
Nginx 默认不转发原始协议信息。后端(如 WordPress、Django、Next.js)只看到内部 HTTP 连接,就会认为当前是不安全连接,从而强制跳转。需在 location 块中明确设置:
-
proxy_set_header X-Forwarded-Proto $scheme;—— $scheme 自动取值为http或https,取决于用户直连 Nginx 时使用的协议(由listen 443 ssl或listen 80决定) - 若 CDN 已设置该头(如 Cloudflare、阿里云 CDN),优先使用
$http_x_forwarded_proto变量,避免覆盖原始值:proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; - 为防 CDN 未传该头,可加兜底逻辑(用 map 指令):
map $http_x_forwarded_proto $real_scheme { default $http_x_forwarded_proto; "" $scheme; }<br> proxy_set_header X-Forwarded-Proto $real_scheme;
配套透传 Host 和其他关键头
仅传协议不够。后端还需知道真实域名、客户端 IP、请求路径等,否则仍可能生成错误跳转地址:
-
proxy_set_header Host $host;—— 确保后端生成的 URL 使用用户访问的域名,而非上游地址(如127.0.0.1:8000) -
proxy_set_header X-Real-IP $remote_addr;和proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 用于日志与限流 -
proxy_set_header X-Forwarded-Host $host;和proxy_set_header X-Forwarded-Port $server_port;—— 辅助后端构建完整 URL
后端必须主动信任并使用该头
Nginx 传了,后端不认等于白传。不同框架启用方式不同,但目标一致:用 X-Forwarded-Proto 替换默认的 scheme 判断:
-
WordPress:在
wp-config.php开头添加
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {<br> $_SERVER['HTTPS'] = 'on';<br> }
同时确认数据库中siteurl和home值为https://example.com(不能是 http 或带端口) -
Django:配置
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'),并开启USE_X_FORWARDED_HOST = True -
Express(Node.js):设置
app.set('trust proxy', true),之后req.protocol将自动返回https
防止 Location 响应头引发二次跳转
即使后端逻辑修正了,它仍可能返回含内部地址的 Location 响应头(如 http://localhost/login)。Nginx 可在发出响应前重写:
- 关闭自动重写(避免干扰):
proxy_redirect off; - 或主动统一重写所有 HTTP 跳转为当前协议+域名:
proxy_redirect ~^http://[^/]+(/.*)$ $scheme://$host$1; - 若后端固定返回某内网地址,可精准替换:
proxy_redirect http://127.0.0.1:3000/ https://$host/;


















