跳到主要内容

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, // 窗口期内最大请求数
}),
/**
* 自定义规则
*/
{
window: 60 * 1000, // 窗口期(毫秒)
limit: 10, // 窗口期内最大请求数
key(ctx) {
return 'host:' + ctx.host; // 自定义限制依据
}
},
]
}))

.start();