# 重定向循环问题修复指南 ## 问题描述 在远程服务器部署后,使用正常浏览器访问时出现 `ERR_TOO_MANY_REDIRECTS` 错误,但使用无痕浏览器可以正常访问。 ## 问题原因 1. **NextAuth URL 配置问题**: 服务器环境变量 `NEXTAUTH_URL` 配置不正确 2. **浏览器缓存**: 正常浏览器缓存了之前的错误重定向配置 3. **静态资源路径错误**: 从错误日志可以看到资源路径被错误拼接 ## 解决方案 ### 1. 检查服务器环境变量 SSH登录到服务器,检查 `.env` 文件: ```bash ssh -p 8006 root@115.190.235.230 cd /var/www/chinese-family-tree cat .env ``` 确保 `NEXTAUTH_URL` 配置正确: ```env # 如果直接通过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. 重新部署 ```bash # 在本地项目目录执行 ./deploy.sh ``` ### 4. 重启应用 ```bash 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. **检查环境变量**: ```bash ssh -p 8006 root@115.190.235.230 'cd /var/www/chinese-family-tree && cat .env | grep NEXTAUTH_URL' ``` 2. **检查应用日志**: ```bash ssh -p 8006 root@115.190.235.230 'pm2 logs chinese-family-tree --lines 50' ``` 3. **测试访问**: - 使用无痕浏览器访问,确认可以正常工作 - 清除正常浏览器缓存后再次访问 ## 如果使用Nginx反向代理 如果您在8006端口使用Nginx反向代理到3000端口,需要确保Nginx配置正确: ```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` 设置为: ```env NEXTAUTH_URL="http://115.190.235.230:8006" ``` ## 常见错误配置示例 ❌ **错误**: ```env NEXTAUTH_URL="http://localhost:3000" # 在生产环境使用localhost ``` ❌ **错误**: ```env NEXTAUTH_URL="http://115.190.235.230:3000" # 但用户通过8006端口访问 ``` ✅ **正确**: ```env 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不匹配,会导致重定向循环 - 浏览器会缓存重定向响应,所以即使修复了配置,也需要清除缓存 - 无痕浏览器不使用缓存,所以能够正常工作