3.8 KiB
3.8 KiB
重定向循环问题修复指南
问题描述
在远程服务器部署后,使用正常浏览器访问时出现 ERR_TOO_MANY_REDIRECTS 错误,但使用无痕浏览器可以正常访问。
问题原因
- NextAuth URL 配置问题: 服务器环境变量
NEXTAUTH_URL配置不正确 - 浏览器缓存: 正常浏览器缓存了之前的错误重定向配置
- 静态资源路径错误: 从错误日志可以看到资源路径被错误拼接
解决方案
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. 清除浏览器缓存
在用户浏览器上:
- 打开开发者工具 (F12)
- 右键点击刷新按钮
- 选择"清空缓存并硬性重新加载"
或者:
- 按 Ctrl+Shift+Delete (Windows) 或 Cmd+Shift+Delete (Mac)
- 选择清除缓存和Cookie
- 重新访问网站
验证步骤
-
检查环境变量:
ssh -p 8006 root@115.190.235.230 'cd /var/www/chinese-family-tree && cat .env | grep NEXTAUTH_URL' -
检查应用日志:
ssh -p 8006 root@115.190.235.230 'pm2 logs chinese-family-tree --lines 50' -
测试访问:
- 使用无痕浏览器访问,确认可以正常工作
- 清除正常浏览器缓存后再次访问
如果使用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一致
预防措施
- 部署前检查: 确保
.env文件中的NEXTAUTH_URL正确 - 使用环境变量: 不要在代码中硬编码URL
- 测试多种浏览器: 部署后使用无痕模式和正常模式都测试一下
- 监控日志: 定期检查应用日志,及时发现重定向问题
技术说明
- NextAuth v4 会根据
NEXTAUTH_URL环境变量生成认证相关的重定向URL - 如果
NEXTAUTH_URL与实际访问URL不匹配,会导致重定向循环 - 浏览器会缓存重定向响应,所以即使修复了配置,也需要清除缓存
- 无痕浏览器不使用缓存,所以能够正常工作