概览Edge Middleware 可在请求抵达应用前进行速率限制与机器人拦截。通过简化的 Token Bucket 与 UA/路径挑战策略,降低恶意访问与爬虫的影响,同时保持合法用户体验。middleware.tsimport { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' const buckets = new Map<string, { tokens: number; ts: number }>() const RATE = 60 const WINDOW = 60_000 function allow(ip: string) { const now = Date.now() const b = buckets.get(ip) || { tokens: RATE, ts: now } const refill = Math.floor((now - b.ts) / WINDOW) * RATE b.tokens = Math.min(RATE, b.tokens + Math.max(0, refill)) b.ts = now if (b.tokens <= 0) return false b.tokens -= 1 buckets.set(ip, b) return true } function isBot(req: NextRequest) { const ua = req.headers.get('user-agent') || '' if (/bot|crawler|spider|crawling/i.test(ua)) return true const p = req.nextUrl.pathname if (p.startsWith('/admin') || p.endsWith('.map')) return true return false } export function middleware(req: NextRequest) { const ip = req.ip ?? req.headers.get('x-forwarded-for') ?? 'unknown' if (isBot(req)) { return new NextResponse('Forbidden', { status: 403 }) } if (!allow(String(ip))) { return new NextResponse('Too Many Requests', { status: 429 }) } return NextResponse.next() } export const config = { matcher: ['/((?!_next|static|api/health).*)'] } 治理要点在边缘执行降低回源压力;将健康检查与静态资源排除在外。对疑似机器人返回 403,或引导到挑战页面。生产环境使用持久存储(KV/Redis/DO)替代内存 Map,确保分布式一致性。验证与指标浏览器与爬虫:拦截命中率高;正常用户无明显影响Next.js:15.0+;Edge Runtime:稳定QPS 高峰可控;错误率与后端负载降低

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
1.895782s