limit_conn_zone在http模块内定义,在http、server、location块内使用
主要用来限制同一个IP能与服务器创建多少个TCP连接(为什么不说http连接,因为http连接就是基于tcp/ip协议的,真正限制的是tcp链接数)
#定义链接数限制内存块,以ip地址为key,内存块名叫my_limit_zone,大小10MB
limit_conn_zone $remote_addr zone=my_limit_zone:10m;
#声明限制单IP限制10个连接
limit_conn my_limit_zone 10;
#声明限制请求传输速率在超过500KB后启用
limit_rate_after 500K;
#声明每个请求会被限速为100K的网速
limit_rate 100K;
#限制每秒请求数(超出的可以丢弃或者排队,排队里也可以定义队列长度,超出的丢弃),首先定义请求数限制的内存块,key为二进制的IP地址,内存块名叫normal_req_limit,大小10M,速率20r/s就是20个request请求每秒
limit_req_zone $binary_remote_addr zone=normal_req_limit:10m rate=20r/s;
#声明限制请求速率,使用上面这个内存块来记录,超过速率的给一个可容纳100个请求的队列,排队处理,nodelay,无推迟,意思是队列满了之后超过的直接丢弃不处理了
limit_req zone=normal_req_limit burst=100 nodelay;