使用fastify-rate-limit实现按IP区分各API独立计数的请求限流
实现方案
默认配置下fastify-rate-limit仅使用请求IP作为限流统计的唯一key,因此所有接口共享计数。你只需要新增keyGenerator配置项,自定义统计key为IP+路由路径的组合,即可在保持原有20次/30秒阈值不变的前提下,实现不同API的限流计数相互独立。
修改后的代码如下:
fastify.register(require('fastify-rate-limit'), { max: 20, timeWindow: 1000 * 30, // 自定义限流统计唯一标识 keyGenerator: (request) => { return `${request.ip}:${request.routerPath}` } });
补充说明
- 这里使用
request.routerPath而非request.url,是为了适配带参数的路由场景,比如/user/:id这类动态路由,不管传入的id参数是什么,都会归到同一个API的限流统计中,符合按接口维度统计的需求。 - 如果需要进一步区分同一接口的不同请求方法(比如GET和POST请求分开统计),可以修改key拼接规则为
${request.ip}:${request.method}:${request.routerPath}即可。
内容的提问来源于stack exchange,提问作者Divyansh
相关产品推荐
相关产品推荐

