You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Vercel部署的Next.js应用代理API时的10秒超时问题

解决Vercel部署Next.js API路由代理超时(504/10秒超时)问题

问题根源

Vercel的Serverless Functions(包含Next.js的API路由)默认最大执行时间为10秒,当你代理的第三方API响应耗时超过10秒时,就会触发Task timed out after 10.01 seconds报错并返回504状态码。

可行解决方案

1. 调整Vercel函数超时时长(仅付费计划支持)

Vercel免费计划无法修改超时限制,Pro及以上套餐可将Serverless Functions的最大执行时间调整至60秒。在项目根目录创建或修改vercel.json:

{
  "functions": {
    "pages/api/**/*.js": {
      "maxDuration": 60
    }
  }
}

注意:若第三方API响应时长超过60秒,此方案仍不适用。

2. 切换为Vercel Edge Functions

Edge Functions的超时限制更宽松(免费计划15秒,Pro及以上60秒),且运行在边缘节点,能降低部分网络延迟。将原API路由改为Edge Runtime模式(以App Router为例):

// app/api/proxy/route.js
export const runtime = 'edge';

export async function POST(request) {
  // 服务端获取认证令牌
  const authToken = await fetch('你的认证接口')
    .then(res => res.json())
    .then(data => data.token);

  // 代理请求到第三方API
  const thirdPartyRes = await fetch('https://第三方API地址', {
    method: request.method,
    headers: {
      'Authorization': `Bearer ${authToken}`,
      // 保留原请求必要头信息,排除host等冲突字段
      ...Object.fromEntries(request.headers.entries()).filter(([key]) => key !== 'host')
    },
    body: request.body
  });

  return new Response(thirdPartyRes.body, {
    status: thirdPartyRes.status,
    headers: thirdPartyRes.headers
  });
}

3. 异步化处理+前端轮询(需第三方API支持)

如果第三方API支持异步任务模式(提交请求后返回任务ID,后续可查询结果),可拆分流程:

  • 第一步:你的API路由仅向第三方提交任务,拿到任务ID后立即返回给前端
  • 第二步:前端定时轮询你的API路由,由该路由查询第三方的任务执行状态,直到获取最终结果
    这种方式避免了Vercel函数长时间挂起,从根本上规避超时问题。

4. 迁移代理逻辑至外部服务

若第三方API响应时长远超60秒,可将代理逻辑部署到支持更长超时的服务(如AWS Lambda最大支持15分钟),Vercel的API路由仅作为中转调用该外部服务,确保Vercel侧的请求耗时控制在10秒以内。

内容的提问来源于stack exchange,提问作者kunalkeshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:22:18