真正有效的是用中间件做限流+行为过滤+身份强化:通过throttle限频次、UA/请求头/Referer识别异常、Nginx前置拦截、认证层兜底及频次审计,而非单纯禁止爬虫。

单纯靠中间件“禁止爬虫”不现实,Laravel 没有内置识别爬虫的魔法能力。真正有效的是:用中间件做**限流+行为过滤+身份强化**,把高频、无标识、异常模式的请求挡在业务逻辑之外。
用 throttle 中间件限制调用频次
这是最直接的防线,不是识别爬虫,而是让爬虫“刷不动”:
- 确保 CACHE_DRIVER=redis(不能是 array 或 file),否则多进程下计数失效
- 路由中写明限流规则,例如
->middleware('throttle:5,1')表示每分钟最多 5 次 - 避免默认按 IP 限流——CDN、NAT 场景下会误杀或放行,改用业务标识:如 App 端传
X-Device-ID,小程序带X-OpenID - 自定义限流键时用纯字符串:过滤掉空格、斜杠等,推荐
str_slug($id)或正则清理
在中间件里识别可疑请求特征
限流是基础,识别异常行为才是精准拦截的关键:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 检查
User-Agent:屏蔽明显自动化 UA,如curl/、python-requests、http-client - 验证必要请求头:对 API 接口可强制要求
X-Requested-With: XMLHttpRequest或自定义头(如X-App-Version) - 检查 Referer 是否为空或来自不可信域名(适用于 Web 路由)
- 拒绝无认证却高频访问敏感接口的请求,比如未登录用户反复调用
/api/user/profile
配合 Nginx 做前置拦截
中间件是 PHP 层防护,高并发恶意请求应在到达 PHP 之前就被压住:
- 用
limit_req_zone控制单 IP 请求速率,例如每秒最多 3 次 - 用
limit_conn_zone限制单 IP 并发连接数,防慢速攻击 - 若走 CDN 或反向代理,Nginx 必须配置
real_ip_header X-Forwarded-For和set_real_ip_from,否则限流对象会错成代理 IP
强化认证与路由权限控制
绕过中间件直击路由的请求,必须被认证层兜底:
- 敏感接口强制绑定
auth:sanctum或自定义 Guard,不能只依赖中间件 - Guard 的
user()方法里可加入调用频次审计(基于 cache 实现),超阈值快速拒绝 - 不要把限流逻辑写在 Form Request 的
authorize()方法里——它返回 403,语义错误,应返回 429


















