NGINX反向代理Next.js时出现ERR_TOO_MANY_REDIRECTS错误如何解决
问题原因
你当前的配置之所以出现/_next/static路径下资源重定向次数过多的问题,核心有两个诱因:
- NGINX的
http块没有引入默认的mime.types配置,无法正确识别静态资源的Content-Type,Next.js收到请求后会因为资源类型不匹配触发重定向逻辑 - 你在
server块定义的X-Forwarded-Proto头没有被location /块继承:location块中重新定义了proxy_set_header规则会覆盖server块的全局配置,导致Next.js拿到的请求协议不对,触发跳转死循环
修复方案
直接替换为如下配置即可:
worker_processes 1; events { worker_connections 1024; } http { # 引入资源类型识别配置,必加 include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; server_name website.dev; # 全局代理头配置,location块不重复定义的话会自动继承 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_redirect off; # 单独匹配Next.js静态资源路径,同时加缓存规则优化加载速度 location /_next/static/ { proxy_pass http://indiestash:3007; expires 1y; add_header Cache-Control "public, immutable"; } location / { proxy_pass http://indiestash:3007; } } }
后续校验步骤
- 修改配置后执行
nginx -s reload重载规则 - 清理浏览器缓存后再访问测试
- 确认Next.js的
next.config.js中没有配置强制HTTPS跳转的全局重定向规则 - 确认NGINX容器和Next.js容器在同一Docker网络下,可正常解析
indiestash主机名
内容的提问来源于stack exchange,提问作者sssaini
相关产品推荐
相关产品推荐

