【Nginx】limit_req_zone

ngx_http_limit_req_module模块是默认安装的
limit_req_zone指令可进行限流访问,防止用户恶意攻击刷爆服务器

nginx.conf配置文件

在http模块下

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
limit_req_zone $binary_remote_addr$uri zone=two:10m rate=1r/m;

在location
对于同一ip不同请求地址,限制平均速率为1请求/秒,超过部分进行延迟处理,若超过1请求/秒,丢弃超过部分

location /api/index/login {
    
    
        proxy_pass http://127.0.0.1:8082/index/login; 
        limit_req zone=one burst=1 nodelay;
 }

对于同一ip相同请求地址,限制平均速率为1请求/秒,超过部分进行延迟处理,若超过1请求/秒,丢弃超过部分

location / {
    
    
        root   /opt/webapp;
        index  index.html index.htm;
        limit_req zone=two burst=1 nodelay;
}

指令详解

limit_req_zone

limit_req_zone key zone=name:size rate=rate;

  • 只能在http块中使用
  • key:若客户的请求匹配了key,则进入zone,可以是文本、变量,通常为Nginx变量。
    $binary_remote_addr(客户的ip),$uri(不带参数的请求地址),$request_uri(带参数的请求地址),$server_name(服务器名称)。
  • zone:指定名字
  • size:指定内存大小,1m可以保持16000个状态
  • rate:限速,使用rate=1r/s,限制平均1秒不超过1个请求。使用rate=1r/m,限制平均1分钟不超过1个请求
# 同一ip不同请求地址,进入名为one的zone,限制速率为5请求/秒
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
# 同一ip同一请求地址,进入名为two的zone,限制速率为1请求/分钟
limit_req_zone $binary_remote_addr$uri zone=two:10m rate=1r/m;

limit_req

imit_req zone=name [burst=number] [nodelay];

  • 可在http, server, location块中使用
  • zone:被声明过的名字
  • burst(可选):指定最大突发请求数,及缓存队列,延迟处理超过rate限制的请求
  • nodelay(可选):在突发请求数大于burst时,会丢弃掉这部分请求
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    
    
    location /search/ {
    
    
        limit_req zone=one burst=5;
    }
}
  1. 请求速率 < rate(1r/s),正常处理
  2. rate(1r/s) < 请求速率 < burst(5r/s),大于rate部分延迟
  3. burst(5r/s) < 请求速率,大于burst部分丢弃(返回503服务暂时不可用)

猜你喜欢

转载自blog.csdn.net/lorogy/article/details/107693598