Laravel 8如何配置秒级速率限制器实现每秒25次请求限流
Laravel 8 秒级速率限制实现方案
无需修改Illuminate\Cache\RateLimiting\Limit核心类,该类本身已提供自定义时间窗口的通用方法,直接调用即可实现秒级粒度的限流。
实现代码
修改你的速率限制配置如下即可实现每秒最多25次请求的需求:
RateLimiter::for('api', function (Request $request) { return [ // 基于客户端IP地址的速率限制:每秒最多25次请求 Limit::per(env('IP_ADDR_RATE_LIMITER_PER_SECOND', 25), 1)->by($request->ip())->response(function () { // 原有自定义超限响应逻辑 }), // 基于API密钥/用户的速率限制:每秒最多25次请求 Limit::per(env('API_KEY_RATE_LIMITER_PER_SECOND', 25), 1)->by($request->input('key'))->response(function () { // 原有自定义超限响应逻辑 }) ]; });
方法说明
Limit::per()方法接收两个核心参数:第一个参数为时间窗口内允许的最大请求数,第二个参数为时间窗口长度,单位为秒。上述代码中的per(25, 1)即代表1秒的时间窗口内最多允许25次请求。- 如果需要保留环境变量配置的灵活性,可在.env文件中新增对应配置项,如
IP_ADDR_RATE_LIMITER_PER_SECOND=25,即可通过env函数动态调整限流规则。
注意事项
不要直接修改vendor目录下的框架核心类,此类修改会在后续执行composer update时被覆盖,导致配置失效。
内容的提问来源于stack exchange,提问作者Mahe Krish
相关产品推荐
相关产品推荐

