nginx配置连接数及限制客户端请求

1.nginx配置连接数

准备两台linux服务器,一台安装nginx,一台安装ApacheBench工具对nginx服务器进行测

ApacheBench 是一个指令列程式,专门用来执行网站服务器的运行效能,特别是针对Apache 网站服务器。这原本是用来检测 Apache 网站服务器能够提供的效能,特别是可以看出Apache能提供每秒能送出多少网页。

(1)准备第一台服务器(nginx)

如果还没有安装nginx的可以看我写的一个安装nginx的文章
下载安装nginx

(2)准备第二台服务器(Apache)

下载Apache
yum install httpd -y
启动apache
service httpd start

——我是在centos6下运行的,centos7使用systemctl start httpd

访问ip,防火墙开启80或使用service network stop直接关闭
nginx配置连接数及限制客户端请求_第1张图片

(3)测试

ab -n500 -c500 http://192.168.195.111/ 
-n为请求总数,-c为并发数,后面为测试的服务器地址

——注意ab命令在安装时就已经添加到环境变量了,所以直接使用即可
nginx配置连接数及限制客户端请求_第2张图片
这里使用到了百度翻译这款神奇的工具,无需下载(下面直接翻译,没有任何改动)

[根] # @主机/从C2 - N10 192.168.195.111 http:/ /
这是一个修改版本2.3 ApacheBench <,> 655654美元:美元
版权所有1996年亚当特维斯,宙斯科技有限公司www.zeustech.net http:/ / /
Apache软件基金会的许可,http://www.apache.org /
基准…………………192.168.195.111(的病人)。
1.6.3 Nginx服务器软件:/
服务器的主机名:192.168.195.111
服务器端口:80
文件路径:/
文件长度:129字节
并发2级:
测试时间:10秒0.023 for
完整的要求:10
失败的请求:0
写错误:0
完全转移:3680字节
HTML:1290字节transferred
第二:通过请求/秒] [ # 441.29(均值)
时间:通过请求4.532 [质谱](均值)
时间:通过请求2.266 [质谱](均值,在所有的并行请求)
传输速率:[ ]个字节/秒158.59
连接时报(MS)
[分钟] + / SD均值中值最大
连接:0 0 0.2 0 1
处理:2 2 10 3 2.4
等待:2 2 9 3 2.3
总:2.5 10 2 3 2
在一个请求到依一定的时间(ms)
50%的2
66%的3
3 75 %
80%的3
90%的10
95%的10
98%的10
99%的10
100%(10长的请求)

稍微看一下,我们就可以知道测试服务器能够承受500并发请求
下面测试1000个并发连接

ab -n1000 -c1000 http://192.168.195.111/

依旧是没有问题
下面测试1500个并发连接

ab -n1500 -c1500 http://192.168.195.111/

提示我们打开文件太多,注意对linux一切皆文件,所以请求数也是文件
nginx配置连接数及限制客户端请求_第3张图片

使用ulimit -a | grep open命令查看linux设置的文件打开数量
这里为1024,所有1500肯定会提示打开文件数量太多
在这里插入图片描述

使用ulimit -n 65535临时修改最大连接数为65535(注意:两台服务器都需要设置)
网上有很多修改最大连接数的文章,这里不细说

再次进行测试

ab -n1500 -c1500 http://192.168.195.111/

结果如下,发现竟然还有失败的请求

基准192.168.195.111(耐心)
已完成150个请求
已完成300个请求
已完成450个请求
已完成600个请求
已完成750个请求
已完成900个请求
已完成1050个请求
已完成1200个请求
已完成1350个请求
已完成1500个请求
已完成1500个请求
服务器软件:nginx/1.6.3
服务器主机名:192.168.195.111
服务器端口:80
文档路径:/
文档长度:129字节
并发级别:1500
测试时间:1.049秒
完成请求:1500
失败的请求:934
(连接:0,接收:0,长度:934,异常:0)
写入错误:0
非2xx响应:934
传输总量:537990字节
传输的HTML:252342字节
每秒请求数:1429.90[/秒](平均值)
每次请求时间:1049.021[ms](平均)
每个请求的时间:0.699[ms](平均,跨所有并发请求)
传输速率:接收到500.83[kbytes/sec]

如果查看nginx错误日志,会发现nginx会提示我们打开的文件过多,所以nginx也配置了客户端连接数
在这里插入图片描述

(4)配置nginx

工作进程的个数,默认为1,设为auto将

worker_processes  auto;

设置最多打开的文件数量

worker_rlimit_nofile 65536;

worker_connections:每个进程可接收的连接数
muiti_accept on:允许一个工作进程响应多个请求

events {
    worker_connections  65535;
    muiti_accept on;
}

nginx -s reload重新加载配置文件
再次进行测试
ab -n1500 -c1500 http://192.168.195.111/
nginx配置连接数及限制客户端请求_第4张图片

2.限制客户端请求

如果我们将nginx的并发访问设置为2000,那么如果遭遇同一个IP发送2000个并发请求,我们如果防御?
(1)限制同一IP并发请求数

修改nginx.conf在http里面添加如下
limit_conn_zone开辟了一个名称为perip,大小为10M的内存空间用于保存客户端IP
limit_conn perip 10表示同一个IP最多10个并发请求

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn perip 10;

使用nginx -s reload重新加载
进行测试
ab -n1500 -c1500 http://192.168.195.111/
最终只有10条成功执行,说明配置成功
在这里插入图片描述

(2)限制请求速度

limit_conn_zone开辟了一个名称为rs,大小为10M的内存空间用于限制请求速度
rate=3r/s表示最多一秒三次(注意这个是速率)

    limit_req_zone $binary_remote_addr zone=rs:10m rate=3r/s;

为了方便测试,我们在下面添加limit_req zone=rs;表示访问该路径下的请求将使用此内存空间进行请求速度限制

    server {
        listen       80;
        server_name  localhost;
        location / {
            limit_req zone=rs;
            root   html;
            index  index.html index.htm;
        }
    }

直接访问nginx服务器IP进行测试,如果我刷新过快
nginx配置连接数及限制客户端请求_第5张图片

完成!

你可能感兴趣的:(nginx)