Nginx  limit_zonelimit_req_zone

(防DDOS***模块)

http {

limit_req_zone $binary_remote_addr zone=one:100m   rate=10r/m;


server {

                  …………………….

                  …………………….

          limit_req   zone=one  burst=1  nodelay;

    ………………….

}

}

rate=10r/m 的意思是每个地址每分钟只能请求10次,也就是说根据令牌桶原理burst=1 一共有1块令牌,并且每分钟只新增10块令牌,
1块令牌发完后多出来的那些请求就会返回503

加上 nodelay之后超过 burst大小的请求就会直接返回503

如果没有该字段会造成大量的tcp连接请求等待。


http{
limit_zone one  $binary_remote_addr  10m;
server
{
......
limit_conn   one  1;
......
}
   }

这里的 one 是声明一个 limit_zone 的名字,$binary_remote_addr是替代 $remore_addr 的变量,10m 是会话状态储存的空间
limit_conn one 1 ,限制客户端并发连接数量为1


nginx_limit_req介绍

一、nginx 限制连接模块介绍

a)nginx 上有两个限制连接的模块一个是 limit_zone 另一个是 limie_req_zone,两个都可以限制连接但具体有什么不同呢
下面是 nginx 官网上给的解释

b)limit_req_zone
Limit frequency of connections from a client.
This module allows you to limit the number of requests for a given session, oras a special case, with one address.
Restriction done using leaky bucket.

c)limit_zone
Limit simultaneous connections from a client.
This module makes it possible to limit the number of simultaneous connectionsfor the assigned session or as a special case, from one address.

d)按照字面的理解,lit_req_zone的功能是通过令牌桶原理来限制用户的连接频率,(这个模块允许你去限制单个地址指定会话或特殊需要的请求数 )
limit_zone 功能是限制一个客户端的并发连接数。(这个模块可以限制单个地址的指定会话或者特殊情况的并发连接数)
一个是限制并发连接一个是限制连接频率,表面上似乎看不出来有什么区别,那就看看实际的效果吧~~~
在我的测试机上面加上这两个参数下面是我的部分配置文件

e)http{
limit_zone one  $binary_remote_addr  10m;
#limit_req_zone  $binary_remote_addr  zone=req_one:10m rate=1r/s;
server
{
......
limit_conn   one  1;
#limit_req   zone=req_one  burst=120;
......
}
}

f)解释一下 limit_zone one  $binary_remote_addr  10m;
这里的 one 是声明一个 limit_zone 的名字$binary_remote_addr是替代 $remore_addr 的变量10m 是会话状态储存的空间
limit_conn one 1 ,
限制客户端并发连接数量为1

二、limit_zone两种工作情况

a)limit_reqzone=one burst=10

i.默认情况下是这样配置的,这样每个请求就会有一个delay时间,

ii.Eglimit_req_zone$binary_remote_addr zone=one:100m rate=10r/m;

就是每分钟有10个令牌供用户使用,按照a的配置情况,就会有一个delay,每个请求时间就是60/10,那每个请求时间就是6s

b)limit_reqzone=one burst=10 nodelay

i.添加nodelay配置,这样就是根据你的网络状况访问,一分钟访问够10次后,服务器直接返回503

ii.Egimit_req_zone$binary_remote_addr zone=one:100m rate=10r/m;

就是每分钟有10个令牌供用户使用,按照b的配置情况,就会根据网络情况访问url,如果一分钟超过10个令牌,服务器返回503,等待下一个一分钟领取访问令牌。