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

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

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

  limit_conn_zone参数:

  参数语法:limit_conn_zone key zone=name:szie;

  上下文:http 标签块

  用于设置共享区域内存,key可以是字符串、nginx自带变量或者前两个组合,如$binary_remove_addr、server_name为内存区域的名称,name为内存区域的名称,size为内存区域的大小。

  

  limit_conn参数:

  参数语法:limit_conn zone number;

  上下文:http、server、location 标签块

  用于指定key设置最大连接数,当超过最大连接数时,服务器会返回503错误。

  限制单IP并发连接数

  nginx配置文件如下:(红色标记为添加或者修改内容)

  

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
#limit_req_zone $binary_remove_addr zone=one:10m rate=1r/s;
#limit_req zone=one burst=;
limit_conn_zone $binary_remove_addr zone=addr:10m; # 添加limit_conn_zone参数
client_header_timeout ;
client_boby_timeout ;
send_timeout ;
client_max_boby_size 8m;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  虚拟主机配置文件,添加limit_conn参数:

[root@Nginx www_date]# cat brian.conf
server {
listen ;
server_name www.brian.com;
location / {
root html/brian;
index index.html index.htm;
limit_conn addr ; # 设置单IP连接数为1
auth_basic "brian training";
auth_basic_user_file /opt/nginx/conf/htpasswd; }
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
access_log logs/brian.log main gzip buffer=128k flush=5s;
error_page /50x.html;
location = /50x.html {
root html;
}
}

  测试:(使用ab测试工具进行测试)

ab -c 1 -n 10 http://127.0.0.1/            # 测试命令

  测试过程中查看nginx的访问日志 ,这时候你会发现当并发为1时,返回值都是200 ,访问正常

  修改测试方式:

ab -c 2 -n 10 http://127.0.0.1/

  测试过程中查看nginx的访问日志 ,这时候你会发现当并发为2时,状态码200和503间隔是1:1 说明nginx已经做了并发连接的限制,对超时连接做出了503响应

以上功能可以用于服务器下载,限制每次访问下载目录的连接数

  限制虚拟主机总连接数:

  不仅可以限制单IP的并发连接数,还可以限制虚拟主机的总连接数,甚至可以对两个同时限制

  nginx配置文件如下:(红色标记为增加或者修改内容)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
#limit_req_zone $binary_remove_addr zone=one:10m rate=1r/s;
#limit_req zone=one burst=;
limit_conn_zone $binary_remove_addr zone=addr:10m; # 添加下面红色标记的两项
limit_conn_zone $server_name zone=perserver:10m;
client_header_timeout ;
client_boby_timeout ;
send_timeout ;
client_max_boby_size 8m;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  虚拟主机配置文件:(红色标记为增加或者修改内容)

[root@Nginx www_date]# cat brian.conf
server {
listen ;
server_name www.brian.com;
location / {
root html/brian;
index index.html index.htm;
#limit_conn addr ;
   limit_conn perserver ; # 添加此项
auth_basic "brian training";
auth_basic_user_file /opt/nginx/conf/htpasswd; }
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
access_log logs/brian.log main gzip buffer=128k flush=5s;
error_page /50x.html;
location = /50x.html {
root html;
}
}

  测试:(使用ab测试工具进行测试)

ab -c 5 -n 1000 http://127.0.0.1/    # 测试命令(并发连接数为5 访问1000次)

  在nginx的统计日志中200和503的状态码出现的次数接近是2:1 说明配置生效成功

Nginx控制并发连接数的更多相关文章

  1. nginx——控制 Nginx 并发连接数

    1. 限制单个 IP 的并发连接数 .... http { include mime.types; default_type application/octet-stream; sendfile on ...

  2. PHP + NGINX 控制视频文件播放,并防止文件下载

    最简单的方法是使用NGINX的 internal 功能 server {    listen 80;    server_name www.xxx.com;     location / {      ...

  3. Linux下查看Nginx的并发连接数和连接状态-乾颐堂

    Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...

  4. 查看 nginx 的并发连接数

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过web界面,一种是通过命令,web查看要比命令查看显示的 ...

  5. Nginx查看并发连接数

    Nginx查看并发连接 通过界面查看 通过界面查看通过web界面查看时Nginx需要开启status模块,也就是安装Nginx时加上 --with-http_stub_status_module 然后 ...

  6. Nginx控制客户端请求的速率

    使用ngx_http_limit_req_module模块的两个参数 ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率 1.limit_req_zon ...

  7. nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile

    参考nginx官网:http://nginx.org/en/docs/ngx_core_module.html#worker_connections 从用户的角度,http 1.1协议下,由于浏览器默 ...

  8. nginx 查看 并发连接数

    通过命令查看 #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 17 ESTABLISHE ...

  9. nginx 查看并发连接数

    这里仅仅说一下用命令查看(也可配置页面) 通过查tcp连接数 1.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]} ...

随机推荐

  1. [Umbraco] 在umbraco中开发xlst的小窍门

    当你在umbraco开发xslt时也可以调用C#里的方法,具体方法参考如下 点击第二个按钮 点击右侧的"Get Extensions" 系统自带了工具类,里面有很多常用也很实用的方 ...

  2. Windows7下无法打开chm(mk:@MSITStore:路径[cannot open the file mk@MSITstore:路径]),chm索引就关闭的解决办法

    解决方法1是: 1,右键关联chm文件的“打开方式”到\Windows\HH.exe 2,在命令行运行regsvr32 itss.dll 3,在命令行运行regsvr32 hhctrl.ocx 方法2 ...

  3. 关于C++11中的std::move和std::forward

    std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::st ...

  4. 帝国CMS-后台管理工具

    后台管理工具 apache+mysql 搭建的后台管理工具 参考手册*************http://www.phome.net/doc/ecmsedu/ 1.安装----- 使用的一键安装包. ...

  5. list string 互转

    List转字符串,用逗号隔开 List<string> list = new List<string>();list.Add("a");list.Add(& ...

  6. 第一次项目上Linux服务器(四:CentOS6下Mysql数据库的安装与配置(转))

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  7. AWK工具的用法

    基本格式 awk '{commands}' filename 或者 stdin | awk '{commands}' 以下,均简写为awk '{commands}'的形式 commands的用法 co ...

  8. EF批量操作数据与缓存扩展框架

    前言 在原生的EF框架中,针对批量数据操作的接口有限,EF扩展框架弥补了EF在批量操作时的接口,这些批量操作包括:批量修改.批量查询.批量删除和数据缓存,如果您想在EF中更方便的批量操作数据,这个扩展 ...

  9. 转载 HashSet用法

    NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet<T>.这个集合类包含不重复项的无序列表.这种集合称为“集(set)”.集是 ...

  10. $.each()和$(selector).each()

    转载:http://www.jb51.net/article/65215.htm $.each()与$(selector).each()不同, 后者专用于jquery对象的遍历, 前者可用于遍历任何的 ...