@zenweb/ratelimit
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

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();

Package Sidebar

Install

npm i @zenweb/ratelimit

Weekly Downloads

35

Version

1.1.1

License

MIT

Unpacked Size

8.71 kB

Total Files

8

Last publish

Collaborators

  • yefei777