ThinkPHP 6.0 无内置防火墙,但可通过官方 throttle 中间件实现 IP 频率限制:安装扩展、配置缓存(推荐 Redis)、在路由中按需绑定限流规则(如 throttle:30,1),并支持自定义标识逻辑。

ThinkPHP 6.0 本身不内置防火墙功能,但可通过中间件 + 缓存机制,快速实现基于 IP 的简易访问频率限制,效果接近轻量级“应用层防火墙”。关键在于利用 Throttle 中间件,它无需额外部署 Nginx 或宝塔插件,直接在 PHP 层拦截高频请求,适合中小项目或开发测试环境。
安装并启用 Throttle 中间件
执行命令安装官方扩展:
- composer require topthink/think-throttle
- 安装后会自动发布配置文件
config/throttle.php;若未生成,运行php think vendor:publish - 确保
app/middleware.php中已开启全局中间件开关:'use_global_middleware' => true
在路由中绑定限流规则
限流需显式挂载到目标路由(不推荐全局启用,避免误拦登录、验证码等正常接口):
- 例如对全部 API 接口限流:每分钟最多 30 次
- Route::group('api', function () { /* ... */ })->middleware('throttle:30,1');
- 单位必须是
m(分钟),不能写s或/10s;支持小数,如0.5表示 30 秒 - 若只限某几个接口,可单独绑定:
->middleware('throttle:5,0.1')(即 6 秒内最多 5 次)
确保缓存驱动可靠
Throttle 依赖缓存计数,若用 file 缓存,在高并发下易出现漏判或计数不准:
- 推荐改用
redis:修改config/cache.php中'default' => 'redis' - 确认 Redis 服务正常运行,且连接配置无误(host/port/auth)
- 若暂无 Redis,至少将 file 缓存的锁机制保留,避免多进程写冲突
自定义限流标识(可选进阶)
默认按 IP 限流,但有时需更精细控制,比如排除内网调试 IP 或合并同一局域网用户:
- 新建中间件
app/middleware/IpWhitelistThrottle.php - 重写
handle()方法,在调用父类前判断$request->ip()是否在白名单数组中 - 或修改
throttle.php配置中的key生成逻辑,加入 UA、路径前缀等维度


















