后端开发小站

分类


标签


nginx ngx_http_limit_req_module 模块

熊毅熊毅

ngx_http_limit_req_module 模块通过设定的key值来限制请求的处理速率,特别是来自单个IP地址的请求速率。使用漏桶算法进行限制。

大致思想就是:划分一个固定大小的内存区域,在nginx的preaccess阶段,以某一个key值将相应的请求存储到相应区域中,再根据设定的速率和挂起数量来限制请求。

配置示例

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
    location /search/ {
        limit_req zone=one burst=5;
    }
}

语法:limit_req zone=name [burst=number] [nodelay];
默认值:空
可配置的位置:http,server,location

配置说明:zone=name为内存区域名字,burst=number为请求速率超过rate后允许挂起的请求数量,nodelay设置后多余的请求会立即返回503

语法::limit_req_zone key zone=name:size rate=rate;
默认值:空
可配置的位置:http

配置说明:key 为不同请求放入设定内存空间的标识,zone=name未设定内存区域的名字,size为空间大小(1m可以存储约16000个状态),rate=rate为设定的请求速率

 

配置测试

size rate burst nodelay 结果
10m 1r/s 0 no 每秒处理一个请求,多余请求返回503
10m 1r/s 5 no 每秒处理一个请求,其它请求全部挂起
10m 1r/s 1 no 每秒处理一个请求,其它请求全部挂起
10m 1r/s 1 yes 每秒处理两个请求,其它请求返回503

 

部分key 可以设置的值

key
含义
$binary_remote_addr 以压缩形式存储ip
$http_user_agent
$server_name

生而为人,必须努力

评论 0
目前没有任何评论