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秒,说明边缘层的限制才是主因。
解决方案
- 改用异步任务模式(推荐):
Serverless函数并不适合长时间运行的同步请求,建议将长任务改为异步处理:- 使用Vercel Queue(Pro计划支持),提交任务后立即返回任务ID给客户端,客户端通过轮询获取任务结果。
- 自行实现任务队列:将任务信息存入数据库,后台函数异步处理任务,客户端定期查询任务状态。
- 确认函数超时配置一致性:
在Vercel项目后台的函数设置中,将超时时间调整为300秒(5分钟),确保和代码里的maxDuration一致。 - 优化函数执行时间:
尝试优化第三方API调用(axios.post(this.REFINED))的速度,减少函数整体执行时间,尽量压缩到60秒以内,避免触发边缘层超时。
内容的提问来源于stack exchange,提问作者Space
相关产品推荐
相关产品推荐

