Laravel限流怎么配置_Laravel Rate Limiting接口访问限制
发布时间 - 2025-11-28 00:00:00 点击率:次Laravel内置限流机制可通过throttle中间件实现,支持按请求频率、用户身份、IP或API Key进行限制,结合RateLimiter可自定义规则,如游客每分钟10次、登录用户100次,超出则返回429状态码,有效防护接口滥用。
Laravel 提供了简单而强大的限流机制,可以轻松对接口访问频率进行控制,防止恶意刷接口或过度请求。你不需要额外安装包,Laravel 自带基于 Redis 的限流支持,结合中间件即可快速实现。
1. 使用内置的限流中间件 throttle
Laravel 内置 throttle 中间件,可以在路由或控制器中直接使用。基本语法是 throttle:最大请求数,分钟数。
例如,在 routes/api.php 中限制某个接口每分钟最多访问 60 次:
Route::get('/data', function () {
return response()->json(['message' => 'OK']);
})->middleware('throttle:60,1');
也可以限制更长时间,比如每小时最多 1000 次:->middleware('throttle:1000,60')
2. 按用户身份限流(登录用户)
如果希望针对已登录用户进行限流,Laravel 会自动使用用户的唯一标识(如 ID)作为限流键,避免所有用户共享同一个限制。
只需确保你的路由在 auth:api 保护下:
Route::middleware(['auth:api', 'throttle:100,60'])->group(function () {
Ro
ute::get('/user/data', 'UserDataController@index');
});
这样每个登录用户每分钟最多请求 100 次。
3. 区分游客和登录用户的不同策略
Laravel 支持使用 漏桶算法 并通过 RateLimiter 门面自定义复杂规则。在 App\Providers\RouteServiceProvider 的 configureRateLimiting() 方法中配置。
例如:游客每分钟最多 10 次,登录用户每分钟 100 次:
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('api', function ($request) {
if ($request->user()) {
return Limit::perMinute(100);
}
return Limit::perMinute(10)->by($request->ip());
});
然后在路由中使用:Route::middleware('throttle:api')->group(...)
4. 自定义限流键(如按 IP 或 API Key)
如果不依赖登录状态,可以通过 IP 地址限流:
RateLimiter::for('api-by-ip', function ($request) {
return Limit::perMinute(20)->by($request->ip());
});
也可以结合请求头中的 API Key 进行限流:
->by($request->header('API-Key'))
5. 返回响应与错误处理
超出限制后,Laravel 会自动返回状态码 429,并附带 Retry-After 头部提示重试时间。你可以自定义异常响应,在 App\Exceptions\Handler 中处理 TooManyRequestsException。
基本上就这些。Laravel 的限流机制灵活且开箱即用,合理配置能有效保护你的 API 接口。
# php
# laravel
# redis
# js
# json
# cad
# app
# 路由
# 状态码
# red
# 中间件
# if
# for
# 接口
# function
# 算法
# 最多
# 每分钟
# 自定义
# 你可以
# 只需
# 你不
# 可以通过
# 自带
# 可通过
# 每小时
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用artisan命令缓存配置和视图
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel怎么为数据库表字段添加索引以优化查询
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
使用Dockerfile构建java web环境
如何快速查询网站的真实建站时间?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
详解Huffman编码算法之Java实现
如何在Windows服务器上快速搭建网站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何快速搭建高效可靠的建站解决方案?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何生成URL和重定向?(路由助手函数)
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
如何获取PHP WAP自助建站系统源码?
Bootstrap整体框架之JavaScript插件架构
简历在线制作网站免费版,如何创建个人简历?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
简单实现Android验证码
电商网站制作价格怎么算,网上拍卖流程以及规则?
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
微信小程序 配置文件详细介绍
高端网站建设与定制开发一站式解决方案 中企动力
JS中对数组元素进行增删改移的方法总结
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
php485函数参数是什么意思_php485各参数详细说明【介绍】
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Laravel怎么判断请求类型_Laravel Request isMethod用法
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
5种Android数据存储方式汇总
大学网站设计制作软件有哪些,如何将网站制作成自己app?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
如何在云主机上快速搭建多站点网站?
js实现获取鼠标当前的位置
Android GridView 滑动条设置一直显示状态(推荐)
Laravel如何使用.env文件管理环境变量?(最佳实践)
浅谈javascript alert和confirm的美化
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
MySQL查询结果复制到新表的方法(更新、插入)


ute::get('/user/data', 'UserDataController@index');