You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理Node.js安装SSL后报ERR_TOO_MANY_REDIRECTS错误

故障现象

通过Letsencrypt Certbot为站点安装SSL证书后,站点无法正常访问,证书安装前所有功能运行正常。使用Chrome浏览器访问时返回ERR_TOO_MANY_REDIRECTS错误,链路追踪可见请求在相同链接间反复重定向,检测截图如下:
重定向循环检测结果
服务器使用Nginx作为Web服务,故障时的配置见问题描述。

故障根因

重定向循环由两个配置问题共同导致:

  • 443端口的反向代理规则缺失关键协议转发头:Nginx将HTTPS请求转发给运行在5000端口的后端服务时,没有告知后端当前请求是HTTPS协议。如果后端开启了强制HTTPS跳转,会误判当前请求为HTTP,返回HTTPS跳转响应,请求回到Nginx后再次转发给后端,后端再次跳转,形成死循环。
  • 80端口的跳转规则存在冗余:Certbot自动生成的80端口配置中,先通过if规则匹配域名跳转HTTPS,末尾又添加了全局return 404规则,虽然正常匹配逻辑下if规则优先级更高,但冗余配置在部分匹配场景下会触发异常跳转。
修复步骤
  1. 修改443端口server块内的反向代理配置,补充真实协议、客户端IP的转发头,将原有location /段替换为以下内容:
location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_cache_bypass $http_upgrade;
}
  1. 简化80端口的跳转配置,删除原有冗余的if判断和return 404规则,替换为以下内容:
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name ppealliance.com www.ppealliance.com;
    # 所有HTTP请求直接跳转HTTPS
    return 301 https://$host$request_uri;
}
  1. 检查运行在5000端口的后端服务配置,如果服务提供了反向代理信任IP配置项,将127.0.0.1加入信任列表,确保后端可以正确识别Nginx转发的协议头,不会自行触发重复跳转。
  2. 保存配置文件后,执行以下命令校验Nginx配置语法是否正确:
    nginx -t
  3. 确认语法校验无报错后,执行以下命令重载Nginx配置让修改生效:
    systemctl reload nginx
验证方法

配置生效后,清空浏览器缓存或使用无痕模式访问站点,即可正常打开。如果仍存在跳转问题,可先临时关闭后端服务的强制HTTPS跳转功能,确认反代链路访问正常后再按需开启。

内容的提问来源于stack exchange,提问作者Iryi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:15:32