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

Clerk中间件加载过慢致NextJS/Vercel 504超时错误,求解决方案

问题描述

我正在开发一个网页,需要使用Clerk实现身份认证与登录功能,但Clerk中间件加载过慢,导致应用无法正常部署。

我的middleware.ts代码

import { authMiddleware } from "@clerk/nextjs";

export default authMiddleware({
    publicRoutes: ['/', '/api/webhook/clerk', "/api/uploadthing"],
    ignoredRoutes: ['/api/webhook/clerk']
});

export const config = {
    matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"],
};

Vercel部署日志截图

Vercel部署日志

解决方案

针对Clerk中间件加载过慢导致部署失败的问题,可以尝试以下几种方案:

  • 优化路由匹配规则
    当前matcher规则覆盖范围过广,会让中间件在几乎所有请求上运行,增加不必要的负载。可以缩小匹配范围,只针对需要认证的路由:

    export const config = {
      matcher: [
        // 仅匹配需要认证的页面路由
        "/dashboard/:path*",
        "/profile/:path*",
        // 匹配API路由但排除公共Webhook和上传接口
        "/api/((?!webhook/clerk|uploadthing).*)"
      ],
    };
    
  • 简化Clerk中间件配置
    ignoredRoutes优先级高于publicRoutes,重复配置会造成冗余逻辑。可以精简配置项:

    export default authMiddleware({
      publicRoutes: ['/', "/api/uploadthing"],
      ignoredRoutes: ['/api/webhook/clerk']
    });
    
  • 更新Clerk依赖版本
    旧版本Clerk可能存在性能缺陷,执行命令升级到最新稳定版:

    npm update @clerk/nextjs
    # 或使用yarn
    yarn upgrade @clerk/nextjs
    
  • 启用Vercel边缘缓存
    在Vercel控制台的「Edge Functions」设置中,为中间件配置边缘缓存策略,减少重复加载的开销。

  • 验证Clerk环境变量
    确认Vercel中配置的NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY和CLERK_SECRET_KEY是否正确,密钥错误会导致中间件反复重试连接,拖慢加载速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:14:59