Files
chinese-family-tree-2/REDIRECT_LOOP_FIX.md
T
freedakgmail b7a8c9ee6e 0.0.8.3
2025-11-24 08:11:15 +08:00

3.8 KiB

重定向循环问题修复指南

问题描述

在远程服务器部署后,使用正常浏览器访问时出现 ERR_TOO_MANY_REDIRECTS 错误,但使用无痕浏览器可以正常访问。

问题原因

  1. NextAuth URL 配置问题: 服务器环境变量 NEXTAUTH_URL 配置不正确
  2. 浏览器缓存: 正常浏览器缓存了之前的错误重定向配置
  3. 静态资源路径错误: 从错误日志可以看到资源路径被错误拼接

解决方案

1. 检查服务器环境变量

SSH登录到服务器,检查 .env 文件:

ssh -p 8006 root@115.190.235.230
cd /var/www/chinese-family-tree
cat .env

确保 NEXTAUTH_URL 配置正确:

# 如果直接通过IP和端口访问
NEXTAUTH_URL="http://115.190.235.230:3000"

# 如果使用Nginx反向代理到8006端口
NEXTAUTH_URL="http://115.190.235.230:8006"

# 如果使用域名
NEXTAUTH_URL="http://your-domain.com"

重要: NEXTAUTH_URL 必须与用户在浏览器中访问的URL完全一致!

2. 更新代码配置

已更新的文件:

  • next.config.mjs: 添加了 output: 'standalone'assetPrefix 配置
  • 这些配置确保在生产环境下静态资源路径正确

3. 重新部署

# 在本地项目目录执行
./deploy.sh

4. 重启应用

ssh -p 8006 root@115.190.235.230 'pm2 restart chinese-family-tree'

5. 清除浏览器缓存

在用户浏览器上:

  1. 打开开发者工具 (F12)
  2. 右键点击刷新按钮
  3. 选择"清空缓存并硬性重新加载"

或者:

  1. 按 Ctrl+Shift+Delete (Windows) 或 Cmd+Shift+Delete (Mac)
  2. 选择清除缓存和Cookie
  3. 重新访问网站

验证步骤

  1. 检查环境变量:

    ssh -p 8006 root@115.190.235.230 'cd /var/www/chinese-family-tree && cat .env | grep NEXTAUTH_URL'
    
  2. 检查应用日志:

    ssh -p 8006 root@115.190.235.230 'pm2 logs chinese-family-tree --lines 50'
    
  3. 测试访问:

    • 使用无痕浏览器访问,确认可以正常工作
    • 清除正常浏览器缓存后再次访问

如果使用Nginx反向代理

如果您在8006端口使用Nginx反向代理到3000端口,需要确保Nginx配置正确:

server {
    listen 8006;
    server_name 115.190.235.230;

    location / {
        proxy_pass http://localhost:3000;
        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_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_cache_bypass $http_upgrade;
    }
}

然后确保 NEXTAUTH_URL 设置为:

NEXTAUTH_URL="http://115.190.235.230:8006"

常见错误配置示例

错误:

NEXTAUTH_URL="http://localhost:3000"  # 在生产环境使用localhost

错误:

NEXTAUTH_URL="http://115.190.235.230:3000"  # 但用户通过8006端口访问

正确:

NEXTAUTH_URL="http://115.190.235.230:8006"  # 与用户访问的URL一致

预防措施

  1. 部署前检查: 确保 .env 文件中的 NEXTAUTH_URL 正确
  2. 使用环境变量: 不要在代码中硬编码URL
  3. 测试多种浏览器: 部署后使用无痕模式和正常模式都测试一下
  4. 监控日志: 定期检查应用日志,及时发现重定向问题

技术说明

  • NextAuth v4 会根据 NEXTAUTH_URL 环境变量生成认证相关的重定向URL
  • 如果 NEXTAUTH_URL 与实际访问URL不匹配,会导致重定向循环
  • 浏览器会缓存重定向响应,所以即使修复了配置,也需要清除缓存
  • 无痕浏览器不使用缓存,所以能够正常工作