lovart3/修复重定向问题说明.md
2025-12-17 20:15:18 +08:00

2.7 KiB
Raw Permalink Blame History

修复重定向端口丢失问题

问题描述

访问 http://156.225.27.52:5245 时:

  1. 应用返回 307 重定向到 /api/auth/guest
  2. 重定向后的 URL 变成 http://156.225.27.52(端口号丢失)
  3. 浏览器访问 80 端口,被 Nginx 拦截返回 404

问题原因

NextAuth 的 signIn 函数在重定向时,如果没有正确配置 AUTH_URL 环境变量,会使用请求的 origin,但可能会丢失端口号。

修复方案

方案 1: 修复代码(已实施)

修改 app/(auth)/api/auth/guest/route.ts:

  • 确保重定向时使用正确的 base URL(包含端口)
  • 优先使用 AUTH_URL 环境变量
  • 如果 AUTH_URL 未设置,使用请求的 origin(包含端口)

方案 2: 设置环境变量

在服务器上设置环境变量:

export AUTH_URL=http://156.225.27.52:5245
export NEXT_PUBLIC_BASE_URL=http://156.225.27.52:5245

或者在 .env.local 文件中:

AUTH_URL=http://156.225.27.52:5245
NEXT_PUBLIC_BASE_URL=http://156.225.27.52:5245

部署步骤

  1. 更新代码

    git pull  # 或上传修复后的文件
    
  2. 设置环境变量(如果使用方案2)

    # 编辑 .env.local
    echo "AUTH_URL=http://156.225.27.52:5245" >> .env.local
    echo "NEXT_PUBLIC_BASE_URL=http://156.225.27.52:5245" >> .env.local
    
  3. 重启应用

    pm2 restart ai-chatbot
    # 或
    pm2 delete ai-chatbot
    pm2 start npm --name ai-chatbot -- start
    

验证

访问 http://156.225.27.52:5245,应该:

  1. 正确重定向到 /api/auth/guest
  2. 重定向 URL 包含端口号 5245
  3. 最终能够正常访问应用

技术细节

修改的代码逻辑

  1. 获取 base URL:

    const baseUrl = process.env.AUTH_URL || requestUrl.origin;
    
    • 优先使用 AUTH_URL 环境变量
    • 如果未设置,使用请求的 origin(包含端口)
  2. 处理相对路径重定向:

    if (redirectUrl.startsWith("/")) {
      const baseUrl = process.env.AUTH_URL || requestUrl.origin;
      finalRedirectUrl = new URL(redirectUrl, baseUrl).toString();
    }
    
    • 将相对路径转换为绝对路径
    • 确保包含正确的端口号

注意事项

  1. 环境变量优先级: AUTH_URL 环境变量优先于请求 origin
  2. 端口一致性: 确保 AUTH_URL 中的端口与 FRPC 穿透端口一致
  3. HTTPS: 如果将来使用 HTTPS,需要更新 AUTH_URL 为 https://

相关文件

  • app/(auth)/api/auth/guest/route.ts - 修复的重定向逻辑
  • proxy.ts - 初始重定向逻辑(已正确使用 request.url)
  • .env.local - 环境变量配置(可选)