Nginx控制并发连接数
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控制并发连接数的更多相关文章
- nginx——控制 Nginx 并发连接数
1. 限制单个 IP 的并发连接数 .... http { include mime.types; default_type application/octet-stream; sendfile on ...
- PHP + NGINX 控制视频文件播放,并防止文件下载
最简单的方法是使用NGINX的 internal 功能 server { listen 80; server_name www.xxx.com; location / { ...
- Linux下查看Nginx的并发连接数和连接状态-乾颐堂
Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...
- 查看 nginx 的并发连接数
通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过web界面,一种是通过命令,web查看要比命令查看显示的 ...
- Nginx查看并发连接数
Nginx查看并发连接 通过界面查看 通过界面查看通过web界面查看时Nginx需要开启status模块,也就是安装Nginx时加上 --with-http_stub_status_module 然后 ...
- Nginx控制客户端请求的速率
使用ngx_http_limit_req_module模块的两个参数 ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率 1.limit_req_zon ...
- nginx最大并发连接数的思考:worker_processes、worker_connections、worker_rlimit_nofile
参考nginx官网:http://nginx.org/en/docs/ngx_core_module.html#worker_connections 从用户的角度,http 1.1协议下,由于浏览器默 ...
- nginx 查看 并发连接数
通过命令查看 #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 17 ESTABLISHE ...
- nginx 查看并发连接数
这里仅仅说一下用命令查看(也可配置页面) 通过查tcp连接数 1.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]} ...
随机推荐
- vue教程1-04 事件 v-on:click="函数"
vue教程1-04 事件 v-on:click="函数" v-on:click/mouseout/mouseover/dblclick/mousedown..... 实例:为d ...
- Scanner的概述与String类的构造和使用_DAY12
1:Scanner的概述(理解) 1)Scanner是JDK5以后出现的方便我们从键盘接受数据的类. 2)Scanner的构造格式: Scanner sc = new Scanner(System.i ...
- Scala之隐式转换implicit详解
假设我们有一个表示文本的行数的类LineNumber: class LineNumber ( val num : Int ) 我们可以用这个类来表示一本书中每一页的行数: val lineNumOfP ...
- Scala使用Akka模拟RPC机制代码
上代码: 另一个版本(自己加注释):http://www.cnblogs.com/DreamDrive/p/6740440.html RemoteMessage.scala trait Remote ...
- c++程序时间统计
如下所示,引入<time.h>我们就可以统计时间了: #include<iostream> #include<time.h> #include<windows ...
- C# 多线程学习系列二
一.关于前台线程和后台线程 1.简介 CLR中线程分为两种类型,一种是前台线程.另一种是后台线程. 前台线程:应用程序的主线程.Thread构造的线程都默认为前台线程 后台线程:线程池线程都为后台线程 ...
- inotify监听文件夹的变动
inotify只能监控单层目录变化,不能监控子目录中的变化情况.如果需要监控子目录,需要在调用inotify_add_watch(int fd, char *dir, int mask):int建立监 ...
- PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)
不多说,直接上干货! 进入PLSQL Developer 1.双击 2.得到 比如,我这里安装的是 全网最详细的Windows系统里Oracle 11g R2 Database服务器端(64bit)的 ...
- JavaScript初探四
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- java多线程下的所的概念
锁和synchronized关键字 为了同步多线程,Java语言使用监视器(monitors),一种高级的机制来限定某一 时刻只有一个线程执行一段受监视器保护的代码.监视器的行为是通过锁来实现 ...