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

Vercel Pro计划下Serverless函数maxDuration设5分钟仍报504错误求助

问题

我正在使用Next.js@latest with App Directory,应用部署在Vercel平台,当前是Pro计划。已将Serverless函数的最长执行时间配置为5分钟,而我的函数通常需要2-3分钟完成执行。

日志显示该Serverless函数返回200状态码且执行正常,但通过浏览器或Postman访问时,约1分钟后会返回504错误。本地运行一切正常,请问可能是什么问题?

相关代码

app/api/generators/article/refine/route.ts

import { type NextRequest } from "next/server";

import { type GetArticle } from "@/types/types";
import GeneratorsAPI from "@/lib/GeneratorsApi/GeneratorsAPI";

export const maxDuration = 300;

export async function POST(request: NextRequest) {
  const payload = (await request.json()) as GetArticle;

  return await GeneratorsAPI.getInstance().getRefinedArticle(payload);
}

lib/GeneratorsAPI

async getRefinedArticle(payload: GetArticle) {
    try {
      this.validatePayloadWith(this.articleValidator, payload);

      const response = await axios.post(this.REFINED, payload, {
        headers: this.headers,
        timeout: 300000,
      });

      const data = response as ArticleAPIReturnType;
      return NextResponse.json({ data: data.data.data }, { status: 200 });
    } catch (err) {
      const error = handleError(err, "getRefinedArticle");

      return NextResponse.json(
        { message: error.message },
        { status: error.errorCode },
      );
    }
  }

Vercel日志数据

Status Code: 200
Execution duration/limit: 1m 45.76s / 250s
function: /api/generators/article/refine
Environment: production

可能的原因及解决方案

核心问题:Vercel边缘层超时限制

Vercel的CDN/边缘网络对客户端发起的请求有默认60秒超时限制——哪怕你的Serverless函数配置了更长的执行时间(如5分钟),客户端请求在等待1分钟后就会被边缘层断开,返回504错误,但函数本身会在后台继续执行直到完成,所以日志会显示200状态码。

其他需排查点

  • 函数maxDuration配置未生效:日志里显示的执行限制是250秒(约4分10秒),和你代码里设置的maxDuration=300(5分钟)不符。需要检查Vercel项目后台的「Function Settings」中是否单独设置了函数超时,该配置会覆盖代码里的maxDuration值。
  • 客户端请求超时:部分浏览器或Postman的默认请求超时可能为1分钟,不过Postman可以手动调整超时时间,但这不是核心问题——因为日志显示函数实际执行了1分45秒,说明边缘层的限制才是主因。

解决方案

  1. 改用异步任务模式(推荐):
    Serverless函数并不适合长时间运行的同步请求,建议将长任务改为异步处理:
    • 使用Vercel Queue(Pro计划支持),提交任务后立即返回任务ID给客户端,客户端通过轮询获取任务结果。
    • 自行实现任务队列:将任务信息存入数据库,后台函数异步处理任务,客户端定期查询任务状态。
  2. 确认函数超时配置一致性:
    在Vercel项目后台的函数设置中,将超时时间调整为300秒(5分钟),确保和代码里的maxDuration一致。
  3. 优化函数执行时间:
    尝试优化第三方API调用(axios.post(this.REFINED))的速度,减少函数整体执行时间,尽量压缩到60秒以内,避免触发边缘层超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:25