Tengine限流
安装 Tengine
- Tengine完全兼容Nginx,是基于nginx-1.18版本基础之上进行开发。
- 下载源码包
- http://tengine.taobao.org/download/tengine-2.3.3.tar.gz
- 安装方法和参照之前nginx安装方法
[root@portal_node_1 src]# wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz
[root@portal_node_1 src]# tar xvf tengine-2.3.3.tar.gz
[root@portal_node_1 src]# cd /usr/local/src/tengine-2.3.3
[root@portal_node_1 tengine-2.3.3]# ./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-poll_module --with-file-aio --with-http_realip_module --with-http_addition_module --with-http_addition_module --with-http_random_index_module --with-http_ssl_module --http-uwsgi-temp-path=/usr/local/nginx/uwsgi_temp --http-scgi-temp-path=/usr/local/nginx/scgi_temp --with-pcre --with-http_stub_status_module --with-stream --add-module=/usr/local/src/nginx-module-vts-0.1.18 --add-module=/usr/local/src/nginx-module-sts-0.1.1 --add-module=/usr/local/src/nginx-module-stream-sts-0.1.1 --add-module=/usr/local/src/nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ --add-module=/usr/local/src/naxsi-0.55.3/naxsi_src/ --with-openssl=/usr/local/src/openssl-1.1.1g --add-module=/usr/local/src/nginx-code-gcc/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/nginx_upstream_check_module-master
[root@portal_node_1 tengine-2.3.3]# make -j 4
[root@portal_node_1 tengine-2.3.3]# make install
限流操作
[root@portal_node_1 vhosts]# vim local_location.conf
location /group1 {
if ($hour ~* "08|09|10|11|12|13|14|15|16|17|18") {
set $bandwidth "300k";
set $exceeding "50k";
}
if ($hour ~* "19|20|21|22|23|00|01|02|03|04|05|06|07") {
set $bandwidth "3000k";
set $exceeding "300k";
}
limit_rate_after $bandwidth;
limit_rate $exceeding;
proxy_pass http://server_group1;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST;
add_header Content-Type application/X-download;
}
关键字说明:
1、$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。
2、one=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。
3、rate=1000r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1000次
4、limit_req zone=one burst=5 nodelay; #zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
5、burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
6、nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
7、$hour 是Tengine 支持的变量,原由nginx中,无此变量。
[root@portal_node_1 conf]# vim nginx.conf #在http块中添加如下配置
#表示一个内存区域大小为10m,并且设定了名称为four
limit_req_zone $binary_remote_addr $request_uri zone=four:10m rate=$limit_count;
[root@portal_node_1 vhosts]# vim local_location.conf
location /group1 {
if ($hour ~* "08|09|10|11|12|13|14|15|16|17|18") { ##工作时间
set $limit_count "1r/s"; #每秒限流1次访问
set $bandwidth "300k"; #限制网络的速度
set $exceeding "50k"; #限制超过多少了开始限速
}
if ($hour ~* "19|20|21|22|23|00|01|02|03|04|05|06|07") { #非工作时间
set $limit_count "1000r/s"; #每秒限流1000次访问
set $bandwidth "3000k"; #限制网络的速度
set $exceeding "300k"; #限制超过多少了开始限速
}
limit_rate_after $bandwidth;
limit_rate $exceeding;
limit_req zone=four burst=3 nodelay;
proxy_pass http://server_group1;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST;
add_header Content-Type application/X-download;
}