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部署日志截图

解决方案
针对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
相关产品推荐
相关产品推荐

