Laravel内置限流机制可通过throttle中间件实现,支持按请求频率、用户身份、IP或API Key进行限制,结合RateLimiter可自定义规则,如游客每分钟10次、登录用户100次,超出则返回429状态码,有效防护接口滥用。

Laravel 提供了简单而强大的限流机制,可以轻松对接口访问频率进行控制,防止恶意刷接口或过度请求。你不需要额外安装包,Laravel 自带基于 Redis 的限流支持,结合中间件即可快速实现。
Laravel 内置 throttle 中间件,可以在路由或控制器中直接使用。基本语法是 throttle:最大请求数,分钟数。
例如,在 routes/api.php 中限制某个接口每分钟最多访问 60 次:
Route::get('/data', function () {<br> return response()->json(['message' => 'OK']);<br>})->middleware('throttle:60,1');也可以限制更长时间,比如每小时最多 1000 次:->middleware('throttle:1000,60')
如果希望针对已登录用户进行限流,Laravel 会自动使用用户的唯一标识(如 ID)作为限流键,避免所有用户共享同一个限制。
只需确保你的路由在 auth:api 保护下:
Route::middleware(['auth:api', 'throttle:100,60'])->group(function () {<br> Route::get('/user/data', 'UserDataController@index');<br>});这样每个登录用户每分钟最多请求 100 次。
Laravel 支持使用 漏桶算法 并通过 RateLimiter 门面自定义复杂规则。在 App\Providers\RouteServiceProvider 的 configureRateLimiting() 方法中配置。
例如:游客每分钟最多 10 次,登录用户每分钟 100 次:
use Illuminate\Cache\RateLimiting\Limit;<br>use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('api', function ($request) {<br> if ($request->user()) {<br> return Limit::perMinute(100);<br> }<br> return Limit::perMinute(10)->by($request->ip());<br>});然后在路由中使用:Route::middleware('throttle:api')->group(...)
如果不依赖登录状态,可以通过 IP 地址限流:
RateLimiter::for('api-by-ip', function ($request) {<br> return Limit::perMinute(20)->by($request->ip());<br>});也可以结合请求头中的 API Key 进行限流:
->by($request->header('API-Key'))
超出限制后,Laravel 会自动返回状态码 429,并附带 Retry-After 头部提示重试时间。你可以自定义异常响应,在 App\Exceptions\Handler 中处理 TooManyRequestsException。
基本上就这些。Laravel 的限流机制灵活且开箱即用,合理配置能有效保护你的 API 接口。
以上就是Laravel限流怎么配置_Laravel Rate Limiting接口访问限制的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号