Nginx 在线新增模块与Nginx的请求限制limit_req_zone及ab压力测试工具

浦琪
2023-12-01

一.今天给项目添加ssl证书时,发现nginx 竟然不支持ssl,经过查看,询问相关人员发现nginx编译的时候没有任何模块(历史原因)。哎。。。。

以下 就记录下本人在线添加nginx对应模块的步骤:

1、下载对应nginx版本

wget http://nginx.org/download/nginx-1.12.2.tar.gz

2、解压编译

  注意:只需要./configure 和make两个步骤,不要make install

tar -xf nginx-1.12.2.tar.gz
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make

3、备份旧版本nginx可执行文件

 mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak

4、复制新nginx二进制文件,进入新的nginx源码包

进入解压路径

cp objs/nginx /usr/local/nginx/sbin/nginx

 5、测试新版本是否正常

/usr/local/nginx/sbin/nginx -t

6、nginx 平滑重启加重新启动

/usr/local/nginx/sbin/nginx -s reload

/usr/local/nginx/sbin/nginx -s restart



7、查看nginx对应模块是否添加成功
nginx -V

特别注意:重新编译了Nginx,只是/usr/local/nginx/sbin/nginx -s reload 新增加模块不会报错,但Nginx新增的配不会生效。这个折腾了很久,一直以为配置问题。

 二.Nginx的请求限制limit_req_zone

nginxnginxnginx可以使用ngx_http_limit_req_module模块的limit_req_zone指令进行限流访问,防止用户恶意攻击刷爆服务器。
ngx_http_limit_req_module模块是nginx默认安装的,所以直接配置即可。

首先,在nginx.conf文件中的http模块下配置

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=50per:10m rate=50r/s;

限制ip的访问频率
1、http设置

http {

    #$limit_conn_zone:限制并发连接数
    #limit_req_zone:请求频率
    #$binary_remote_addr:以客户端IP进行限制
    #zone=one:10m:创建IP存储区大小为10M,用来存储访问频率
    #rate=10r/s:表示客户端的访问评率为每秒10次
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;     
}    

2、server设置

server {
        listen       80;
        server_name  localhost;
        location / {
            #限制并发数2
            limit_conn  one1  2;  
            #burst:如果请求的频率超过了限制域配置的值,请求处理会被延迟
            #nodelay:超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值,这个请求会被终止,并返回503
            limit_req zone=one2 burst=10 nodelay;
            root   html;
            index  index.html index.htm;
        }
}

#burst用于指定最大突发请求数。许多场景下,单一地限制rate并不能满足需求,设置burst,可以延迟处理超过rate限制的请求。

#nodelay,在突发请求数大于burst时,会丢弃掉这部分请求。因为如果只是延迟处理,就像”漏斗“,一旦上面加得快(请求),下面漏的慢(处理速度),”漏斗”总会有溢出的时候。这时,丢弃掉溢出的部分就显得很有意义了。

三.ab压力测试工具

yum install httpd-tools

ab -n 50 -c 20 http://192.168.15.7/download/

-n : 总的请求数
-c : 同时并发的请求数

压力测试工具输出内容详解

[root@web02 ~]  ab -n 50 -c 20 http://192.168.15.7/download/

This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.15.7 (be patient).....done


Server Software:        nginx/1.20.0
Server Hostname:        192.168.15.7
Server Port:            80

Document Path:          /download/
Document Length:        453 bytes

Concurrency Level:      20
Time taken for tests:   0.006 seconds				发费的总时间
Complete requests:      50							总共发起的请求个数
Failed requests:        44							没有来得及处理的请求个数
   (Connect: 0, Receive: 0, Length: 44, Exceptions: 0)
Write errors:           0
Non-2xx responses:      44
Total transferred:      19052 bytes
HTML transferred:       10330 bytes
Requests per second:    8434.55 [#/sec] (mean)				每秒请求数(总请求数除总时间)
Time per request:       2.371 [ms] (mean)					对于客户端而言,单个请求所用的时间
Time per request:       0.119 [ms] (mean, across all concurrent requests)		服务端处理请求的时间,不包括网络传输时间等
Transfer rate:          3138.57 [Kbytes/sec] received				网络速率,可以用来当作网络瓶颈参考值

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     1    1   0.5      1       2
Waiting:        0    1   0.3      1       2
Total:          1    2   0.4      2       2

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      2
  95%      2
  98%      2
  99%      2
 100%      2 (longest request)

 

 类似资料: