0.0.8.3
This commit is contained in:
@@ -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不匹配,会导致重定向循环
|
||||
- 浏览器会缓存重定向响应,所以即使修复了配置,也需要清除缓存
|
||||
- 无痕浏览器不使用缓存,所以能够正常工作
|
||||
Reference in New Issue
Block a user