This commit is contained in:
freedakgmail
2025-11-24 08:11:15 +08:00
parent bec270c9af
commit b7a8c9ee6e
674 changed files with 7042 additions and 278 deletions
+146
View File
@@ -0,0 +1,146 @@
# 重定向循环问题修复指南
## 问题描述
在远程服务器部署后,使用正常浏览器访问时出现 `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不匹配,会导致重定向循环
- 浏览器会缓存重定向响应,所以即使修复了配置,也需要清除缓存
- 无痕浏览器不使用缓存,所以能够正常工作