Nginx连接限制模块 – ngx_http_limit_conn_module


01.nginx的连接限制模块用于限制单个key(关键字)的最大连接。

  • 连接限制模块的工作原理:
    • 通过limit_conn_zone配置项,在http配置段中定义一个共享内存区域,用来存储不同key的信息。
    • 通过limit_conn配置项,在http,server或location配置段中,指定一个对应的共享内存区域。
      • 在指定的共享内存区域中,根据当前计算出的key的信息来限制客户端请求的最大连接数。
  • 请求限制模块的配置项包括:
    • limit_conn,指定一个共享内存区域,并且设置连接限制的参数,其格式为:
      limit_conn zone number;
      • zone,自定义的内存共享区域的名称,对应limit_conn_zone中配置的zone。
      • number,最大连接数。
    • limit_conn_dry_run;,是否开启干跑模式;如果开启,连接限制的不会生效,但共享内存区域的key值会增加。
      • limit_conn_dry_run的值为on或者off,默认为off。
      • limit_conn_dry_run可以配置在http,server或location配置段中。
    • limit_conn_log_level,设置当请求被拒绝时,该日志对应的日志级别。
      • limit_conn_log_level的值为info,notice,warn和error;默认为error。
      • limit_conn_log_level可以配置在http,server或location配置段中。
    • limit_conn_status,当请求被拒绝时,返回的状态码。
      • limit_conn_status的默认值为503。
      • limit_conn_status可以配置在http,server或location配置段中。
    • limit_conn_zone,设置共享缓存区域的属性,其格式为:
      limit_conn_zone key zone=name:size;
      • key,key的名称,通过变量来获取;例如$binary_remote_addr表示以客户端地址的二进制为key。
      • zone,自定义的内存共享区域的名称,对应limit_conn中配置的zone。
      • size,缓存取的大小,单位通常为k,m或者g。


02.nginx的请求限制模块的配置示例:

  • vim /opt/Apps/nginx/conf/nginx.conf,在主配置文件的http段中添加如下配置:
limit_conn_zone $binary_remote_addr zone=remote_addr_conn:10m;
  • 添加一个名称为remote_addr_conn的共享内存区域,其大小为10m;它以客户端的ip地址的二进制为key。
  • vim /opt/Apps/nginx/conf/conf.d/main.conf,修改为如下配置:
server {
    listen 80;
    server_name nginx.test.com;
    error_log logs/nginx_test_error.log error;
    access_log logs/nginx_test_access.log main gzip flush=5m;

    location / {
        root html/main;
        index index.html index.htm index.php;
        limit_conn remote_addr_conn 1;
    }
}

  • 由于文件体积较大,在一个连接没有完成请求之前,另一个同样的请求会被拒绝。

  • 失败的请求以error的日志级别输出。
文档更新时间: 2020-03-11 19:49   作者:闻骏