Coin163

nginx限制访问频率limit模块

2016-03-09by coin, 次阅读
 ngx_http_limit_req_module
 nginx使用此模块主要用来限制每秒请求数量,至于依据什么条件限制是由我们来自定义的。
     命令: limit_req_zone $variable zone=name:size rate=rate;
     大概意思是:以$variable变量为条件,命名为name,设置的存储空间大小为size,设置限定频率为rate;
    可以设置多个,不同条件,不同名称,不同大小的限制。
    这个定义需要写在http配置段中。 在匹配的location中写上limit_req zone=name [burst=number] [nodelay];
这里burst就是允许的漏桶数,当请求频率大于rate但是超出的数量不大于burst设置的数量,则nginx会将超出的请求延迟后面返回。
如果请求数量超出burst了,则将超出部分直接返回错误码,默认503。至于nodelay就是设置是否要延迟,有它不超过burst的请求才延迟。
$binary_remote_addr,可以根据自己的需求,来定义自身的相应条件。

The ngx_http_limit_req_module module (0.7.21) is used to limit the request processing rate per a defined key, in particular,
the processing rate of requests coming from a single IP address. The limitation is done using the “leaky bucket” method.

配置例子:

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

测试
ab -n 10 -c 1 http://www.xxx.com/

------分隔线----------------------------