一、限制连接数量
为了限制连接的数量,首先,使用limit_conn_zone
指令来定义密钥并设置共享内存区域的参数(工作进程将使用该区域来共享键值的计数器)。作为第一个参数,指定作为关键字计算的表达式。在第二个参数区域中,指定区域的名称及其大小。
limit_conn_zone $binary_remote_addr zone=addr:10m;
其次,使用limit_conn
指令在一个位置、一个虚拟服务器或整个HTTP上下文中应用该限制。将共享内存区域的名称指定为第一个参数,并将每个密钥的允许连接的数量作为第二个参数。
location /download/ {
limit_conn addr 1;
}
[root@server1 download]# pwd
/usr/local/nginx/html/download
[root@server1 download]# ls
iso7.gif
测试:当访问该内容并发数为1时
[root@foundation7 ~]# ab -c 1 -n 10 http://172.25.7.1/download/iso7.gif
[root@server1 logs]# cat access.log
全部访问成功
测试:当访问该内容并发数为10时
[root@foundation7 ~]# ab -c 10 -n 10 http://172.25.7.1/download/iso7.gif
[root@server1 logs]# cat access.log
只有一次访问成功,其他都是503报错
二、限制请求速率
为了限制请求率,首先,使limit_req_zone
指令设置密钥和共享内存区域来保持计数器。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
一旦定义了共享内存区域,在虚拟服务器或位置(或者如果需要的话,在全局上)使用limit_req
指令来限制请求率:
location /download/ {
limit_req zone=one burst=5;
}