ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 基本功能 1. 用于限制客户端处理请求的**平均**速率; 2. 默认编译进nginx,通过--without-http_limit_req_module禁用; 3. 使用共享内存,对所有worker子进程生效; 4. 限流算法leaky_bucket; ##leaky_bucket算法 可以看到此算法将流量进行了削平,所有流量没有超过此漏斗的都可以进行访问,但是超过总流量限定之后就会被拒绝访问; ![](https://img.kancloud.cn/86/4d/864dec29514c52300f33b40a760bb5e9_1912x1056.png) ## 常用指令 1. limit_req_zone; 2. limit_req_status; 3. limit_req_log_level; 4. limit_req; ## limit_req_zone 语法: ``` limit_req_zone key zone=name:size rate=rate; ``` 默认值: ``` 无 ``` 上下文: ``` http ``` 示例: ``` limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m; //使用binary_remote_addr对客户端进行表示,然后定义一个名称one,并限速10m. 2r/m 的意思是每分钟2个请求,并且这个请求是平均的,第一个请求30秒后才可以进行第二个请求,否则拒绝;也就是30秒处理一个请求; ``` ## limit_req_status 语法: ``` limit_req_status code; ``` 默认值: ``` limit_req_status 503; ``` 上下文: ``` http | server | location ``` ## limit_req_log_level 语法: ``` limit_req_log_level info | notice | warn | error; ``` 默认值: ``` limit_req_log_level error; ``` 上下文: ``` http | server | location ``` ## limit_req 语法: ``` limit_req zone=name [burst=number][nodelay][delay=number]; //burst是定义桶的大小 ``` 默认值: ``` 无 ``` 上下文: ``` http | server | location ``` 示例: ``` limit_req zone=one; //one是limit_req_zone定义的名称; limit_req zone=one burst=5 nodelay; ``` ## 配置 ``` limit_req_zone $binary_remote_addr zone=limit_req:15m rate=2r/m; server { listen 8080; server_name www.lzj.com; charset utf-8; location / { root html; index index.html; limit_req_status 504; limit_req_log_level notice; limit_req zone=limit_req; # limit_req zone=limit_req burst=7 nodelay; } } ```