zoukankan      html  css  js  c++  java
  • 控制nginx并发链接数量和客户端请求nginx的速率

    一、控制nginx并发链接数

    ngx_http_limit_conn_module这个模块用于限制每个定义的key值的链接数,特别是单IP的链接数。

    不是所有的链接数都会被计数,一个符合计数要求的连接数是整个请求头已经被读取的链接数。

    控制nginx并发链接数量参数的说明如下:

    1)、limit_conn_zone参数:
    语法: limit_conn_zone key zone=name:size;
    上下文http
    用于设置共享内存区域,key可以是字符串、 nginx自带变量或前两个组合,如$binary_remote_addr、$server_name。name为内存区域的名称,size为内存区域的大小。
    
    2) limit_conn参数:
    语法: limit_conn_zone_number;
    上下文httpserverlocation
    用于指定key设置最大连接数。当超过最大连接数时,服务器会返回503( Service Temporarily Unavailable)错误。
    

     1)、限制单IP并发链接数

    nginx的配置文件如下:

    [root@nginx conf]# cat nginx.conf
    worker_processes  4;
    worker_cpu_affinity 0001 0010 0100 1000;
    worker_rlimit_nofile 65535;
    user www;
    
    events {
    	use epoll;
        worker_connections  20480;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server_tokens off;
        keepalive_timeout  65;
    	
        limit_conn_zone $binary_remote_addr zone=addr:10m;
            ...
            ...
         
         server {
            listen       80;
            server_name  www.dmtest.com;
            location / {
                root   html;
                index  index.php index.html index.htm;  
    	    limit_conn addr 1;    #限制单IP的并发链接为1
            }
    
    }
    

     2)、限制虚拟主机总链接数

    不仅可以限制单IP的并发链接数,还可以限制虚拟主机总链接数,甚至可以对两者同时限制,nginx的配置文件如下:

    [root@nginx conf]# cat nginx.conf
    worker_processes  4;
    worker_cpu_affinity 0001 0010 0100 1000;
    worker_rlimit_nofile 65535;
    user www;
    
    events {
    	use epoll;
        worker_connections  20480;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server_tokens off;
        keepalive_timeout  65;
    	
        limit_conn_zone $binary_remote_addr zone=addr:10m;
    	limit_conn_zone $binary_name zone=perserver:10m;
            ...
            ...
         
         server {
            listen       80;
            server_name  www.dmtest.com;
            location / {
                root   html;
                index  index.php index.html index.htm;  
    	    limit_conn perserver 1;    #限制虚拟主机连接数为2
            }
    
    }
    

     二、控制客户端请求nginx的速率

    ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率。
    limit_req_zone参数说明如下:
    语法: limit_req_zone key zone=name:size rate=rate;
    上下文:http
    用于设置共享内存区域,key可以是字符串、 nginx自带变量或前两个组合,如$binary_remote_addr。 name为内存区域的名称,size为内存区域的大小,rate为速率,单位为r/s,每秒一个请求。
    
    limit_req参数说明如下:
    语法: limit_req zone=name [burst=number] [nodelay];
    上下文:http、 server、 location
    这里运用了令牌桶原理, burst=num,一共有num块令牌,令牌发完后,多出来的那些请求就会返回503。
    换句话说,一个银行,只有一个营业员,银行很小,等候室只有5个人的位置。因此,营业员一个时刻只能为一个人提供服务,剩下的不超过5个人可以在银行内等待,
    超出的人不提供服务,直接返回503。
    nodelay默认在不超过 burst值的前提下会排队等待处理,如果使用此参数,就会处理完num+1次请求,剩余的请求都视为超时,返回503。
    

     配置如下:

    [root@nginx conf]# cat nginx.conf
    worker_processes  4;
    worker_cpu_affinity 0001 0010 0100 1000;
    worker_rlimit_nofile 65535;
    user www;
    
    events {
    	use epoll;
        worker_connections  20480;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        server_tokens off;
        keepalive_timeout  65;
    	
        limit_conn_zone $binary_remote_addr zone=addr:10m rate=1r/s;
    	#以请求的客户端IP作为key值,内存区域命名为noe,分配10m内存空间,访问速率限制为1秒1次请求(request)
            ...
            ...
         
         server {
            listen       80;
            server_name  www.dmtest.com;
            location / {
                root   html;
                index  index.php index.html index.htm;  
    	    limit_conn perserver 1;
    		#使用前面定义的名为one的内存空间,队列值为5,即可以有5个请求排队等待
            }
    
    }
    
  • 相关阅读:
    Invalid command 'RewriteEngine'解决办法
    JEZ reCAPTCHA 谷歌验证码插件及使用方法
    一段图片预加载的代码
    Fancybox
    Silverlight4 beta 中的.net ria service自定义用户身份验证之改变
    .net ria service 数据验证(7)
    .net ria services 自定义函数(9)
    C#开发ActiveX控件及制作CAB包
    Silverlight 3.0 中的 Local Connection
    Silverlight3端操作数据库(5)
  • 原文地址:https://www.cnblogs.com/Mr-Ding/p/9611586.html
Copyright © 2011-2022 走看看