续我的上篇博文:https://mp.csdn.net/postedit/89512198。即本篇博文是在上篇博文修改完之后的nginx.conf文件中进行修改的。
1、在nginx.conf里的http{}里加上如下代码:
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf #在其中的36行加入下面的内容(在http{}模块中加入的)
36 limit_conn_zone $binary_remote_addr zone=addr:10m;
#解释内容如下:
要限制连接,必须先有一个容器对连接进行计数,在http段加入如下代码:
"zone=" 给它一个名字,可以随便叫,这个名字要跟下面的 limit_conn 一致
$binary_remote_addr = 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话。 $binary_remote_addr是限制同一客户端ip地址;
2、在需要限制并发数的网站配置server{}里加上如下代码:
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf #在其中的49-51行加入下面的location模块(在server{}模块中加入的)
49 location /download/ { #结合配置文件中server{}中的定义,我们可以知道,该location模块表示:在访问http://localhost/download/...内容(或者http://172.25.83.1/...内容)时,进行并发数为1的限制
50 limit_conn addr 1; #限制每个IP只能发起1个连接(addr 要跟 limit_conn_zone 的变量对应)
51 }
#参数解释:
limit_conn为限制并发连接数;
3、修改完配置文件nginx.conf之后,重新加载nginx服务
[root@server1 ~]# /usr/local/nginx/sbin/nginx -s reload
4、进行测试:
[root@server1 ~]# cd /usr/local/nginx/html/
[root@server1 html]# ls
50x.html index.html
[root@server1 html]# mkdir download #在nginx的默认发布目录中创建download目录,并在网上随意下载图片到该目录中(我这里下载的是vim.jpg)
[root@server1 download]# ls
vim.jpg
#在物理机上进行访问的测试:
[root@foundation83 Desktop]# ab -c 10 -n 10 http://172.25.83.1/download/vim.jpg
Complete requests: 10
Failed requests: 8 #10次并发,10次访问。我们发现有8次是失败的。(这个不太准确)
[root@foundation83 Desktop]# ab -c 1 -n 10 http://172.25.83.1/download/vim.jpg
Complete requests: 10
Failed requests: 0 #1次并发,10次访问。我们发现有0次是失败的。(这个准确)
Time taken for tests: 0.012 seconds
Transfer rate: 362132.48 [Kbytes/sec] received
1、在需要限制下载速率的网站配置server{}里加上如下代码:
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf #在下面的location模块中加入第53行的内容
51 location /download/ {
52 limit_conn addr 1;
53 limit_rate 50k; //是对每个连接限速50k。这里是对连接限速,而不是对IP限速!如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate * 2
54 }
2、在需要限制并发数的网站配置server{}里加上如下代码:
[root@server1 ~]# /usr/local/nginx/sbin/nginx -s reload
3、进行测试:
#在物理机上进行访问的测试:
[root@foundation83 Desktop]# ab -c 1 -n 10 http://172.25.83.1/download/vim.jpg
Time taken for tests: 79.174 seconds
Complete requests: 10
Failed requests: 0
Transfer rate: 55.98 [Kbytes/sec] received #我们可以看到速率在50k左右