@zenweb/ratelimit
v3.2.1
Published
Zenweb request rate limit module
Downloads
1,087
Maintainers
Readme
ratelimit - 请求频次限制
本模块用于请求频次限制,防恶意CC请求攻击。
使用 Radis 进行分布式计算,支持多实例多容器下精确防护。
安装
$ yarn add @zenweb/ratelimit
配置
src/index.ts
import { create } from 'zenweb';
import ratelimit, { clientIpLimitRule } from '@zenweb/ratelimit';
create()
.setup(ratelimit({
// Radis 配置,可以直接配置 Radis 服务器地址等连接信息,或使用指定 Radis 实例。
radis: {
host: '127.0.0.1', // 主机,默认: 127.0.0.1 或环境变量: WAF_REDIS_HOST
port: 6379, // 端口,默认: 6379 或环境变量: WAF_REDIS_PORT
password: '', // 密码,默认: 空 或环境变量: WAF_REDIS_PASSWORD
db: 0, // 数据库,默认: 0 或环境变量: WAF_REDIS_DB
},
logged: true, // 开启防护日志记录
denyHttpStatus: 426, // 拒绝服务时使用的 HTTP 状态码
rules: [
/**
* 客户端 IP 请求量限制
*/
clientIpLimitRule({
ignores: [], // 忽略的 IP 列表
window: 3 * 1000, // 窗口期(毫秒)
limit: 1, // 窗口期内最大请求数
blocked: { // 【可选】封堵配置
window: 1000 * 30, // 封堵触发窗口期(毫秒)
hits: 5, // 30秒内命中5次
expire: 1000 * 10, // 10秒内完全封堵
},
}),
/**
* 自定义规则
*/
{
window: 60 * 1000, // 窗口期(毫秒)
limit: 10, // 窗口期内最大请求数
key(ctx) {
return 'host:' + ctx.host; // 自定义限制依据
}
},
]
}))
.start();