一.今天给项目添加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)