nginx限流

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;
    }

你可能感兴趣的:(程序人生)