# 部署问题修复记录 ## 问题描述 部署后访问 http://115.190.235.230:8006 时出现严重的重定向循环问题: - URL被重复拼接多次:`http://115.190.235.230:8006/115.190.235.230:8006/115.190.235.230:8006/...` - 浏览器报错:`ERR_TOO_MANY_REDIRECTS` - Service Worker 不被支持警告 ## 根本原因 Next.js 配置文件中使用了 `output: 'standalone'` 配置,但部署时使用的是 `next start` 命令启动,两者不兼容导致: 1. Next.js 警告:`"next start" does not work with "output: standalone" configuration` 2. 路由处理异常,导致URL重复拼接 3. 重定向循环 ## 解决方案 ### 1. 修改 Next.js 配置 **文件**: `next.config.mjs` **修改前**: ```javascript const nextConfig = { output: 'standalone', // 问题所在 images: { unoptimized: true, }, } ``` **修改后**: ```javascript const nextConfig = { images: { unoptimized: true, }, } ``` ### 2. 清理服务器缓存并重新构建 ```bash # 连接服务器 ssh -p 22 root@115.190.235.230 # 进入项目目录 cd /var/www/chinese-family-tree # 停止应用 pm2 stop chinese-family-tree # 删除旧的构建文件 rm -rf .next # 重新构建 pnpm build # 重启应用 PORT=8006 pm2 restart chinese-family-tree --update-env ``` ### 3. 验证修复 ```bash # 检查HTTP响应 curl -I http://115.190.235.230:8006/ # 应该返回: HTTP/1.1 200 OK # 检查应用日志 pm2 logs chinese-family-tree --lines 20 # 不应该再有 standalone 警告 ``` ## 修复结果 ✅ 重定向循环问题已解决 ✅ 应用正常启动在 8006 端口 ✅ 页面可以正常访问 ✅ 没有 standalone 配置警告 ## 经验教训 1. **不要混用 standalone 和 next start** - `output: 'standalone'` 需要使用 `node .next/standalone/server.js` 启动 - 使用 `next start` 时不要配置 `output: 'standalone'` 2. **部署后清理缓存** - 修改配置后必须删除 `.next` 目录重新构建 - 否则会使用旧的缓存文件 3. **验证环境变量** - 确保 `NEXTAUTH_URL` 与实际访问URL一致 - 使用 `pm2 env ` 检查运行时环境变量 ## 相关文档 - [Next.js Standalone Output](https://nextjs.org/docs/app/api-reference/config/next-config-js/output) - [Next.js Deployment](https://nextjs.org/docs/app/building-your-application/deploying)