Laravel限速中间件需显式配置在路由或控制器中,throttle:60,1表示每分钟60次(单位为分钟),支持小数如0.5即30秒;按用户限速用throttle:60,1,users;必须使用Redis等支持原子操作的缓存驱动;429响应应通过异常处理器统一返回结构化JSON。

限速中间件怎么配在 Laravel 路由上
Laravel 默认就带 throttle 中间件,不用装包,但得知道它绑在哪、怎么传参。它不是全局生效的,必须显式加到路由或控制器里。
常见错误是只写 throttle:60,1 却没注意这个“1”单位是分钟——结果发现每分钟只能调 60 次,但前端发了 3 个并发请求就直接 429,以为配置错了,其实是单位理解偏差。
-
throttle:60,1:每分钟最多 60 次(1是分钟) -
throttle:10,0.5:每 30 秒最多 10 次(支持小数,单位是分钟) - 如果想按小时限速,写
throttle:1000,60,别写throttle:1000,1——后者还是 1 分钟 - API 路由建议用
api中间件组包裹,否则throttle可能因 session 或 cookie 机制失效
为什么登录用户和游客被算进同一个限速桶
默认 throttle 中间件用的是客户端 IP 做 key,所以同一局域网下多个用户(比如公司内网、校园网)会互相干扰;而登录用户本该按 user.id 限速,却没生效。
根本原因是没指定 $key 逻辑。Laravel 的 ThrottleRequests 中间件允许你传第三个参数作为 key 生成器,但文档里藏得深,新手基本跳过。
- 要按用户限速:用
throttle:60,1,users(users表示用Auth::id()当 key) - 要按 IP + 用户组合限速(更严格):得自定义中间件,重写
resolveRequestSignature() - 游客(未登录)走
users会 fallback 到 IP,所以不会崩,但行为不透明——建议日志里打一句request()->user() ? 'user:'.$user->id : 'guest:'.request()->ip()看清实际 key
Redis 配置不对会导致限速完全失效
很多人本地开发用 file 缓存,上线切 Redis 后发现限速不生效,查日志也没报错。这是因为 throttle 中间件底层依赖缓存驱动的原子操作(如 incr、expire),而 file 缓存不支持原子递增,会静默降级为“每次请求都重置计数”,等于没限。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
现象是:无论怎么刷接口,永远不返回 429;或者偶尔触发,但阈值完全不准。
- 检查缓存驱动:
config/cache.php中'default' => env('CACHE_DRIVER', 'redis')必须是redis或memcached - Laravel 9+ 默认用
cache.store,但throttle显式用了cache.rate_limiterstore,需确认config/cache.php里有对应配置 - Redis 连接超时或认证失败时,Laravel 不抛异常,而是 fallback 到 array 驱动——务必在部署后跑一次
php artisan tinker手动测Cache::store('rate_limiter')->increment('test')
API 返回 429 时怎么让前端看懂
默认返回的是纯文本 Too Many Requests,没有 JSON 结构、没剩余额度、没重试时间戳,前端只能干等或硬编码 retry-after。这不是体验问题,是接口契约缺失。
真正该做的是覆盖 ThrottleRequests 的响应逻辑,而不是在每个控制器里重复处理。
- 在
app/Exceptions/Handler.php的render()方法里判断$exception instanceof ThrottleRequestsException - 手动读取响应头里的
Retry-After和X-RateLimit-Limit,拼成 JSON 返回 - 注意:不要改
Illuminate\Routing\Middleware\ThrottleRequests类本身,它被框架锁定;要用中间件继承或异常渲染拦截 - 如果用了 Sanctum 或 Passport,token 过期和限速 429 容易混淆,建议在响应里加
"error": "rate_limit_exceeded"字段明确区分
限速真正的复杂点不在配几行代码,而在 key 怎么定、存储是否可靠、失败是否可观察——这三个地方漏一个,线上就变成玄学限流。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










