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]} ...
随机推荐
- spring boot 中使用swagger 来自动生成接口文档
1.依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa ...
- mysql笔记-索引
什么是聚簇索引 聚簇索引:索引的叶节点就是数据节点(索引值).而非聚簇索引的叶节点仍然是索引节点(告诉你怎么在表中查找这一记录),只不过有一个指针指向对应的数据块. Innodb和MyIsam区别 转 ...
- k8s之安装docker-ce17.06
1.下载rpm包 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ https://download.docker. ...
- python的Web框架:Django路由系统以及模板导入
Django的路由系统 当一个请求来到时 当一个请求来到时 1.首先到项目目录下的urls.py(根URLconf模块)中,查找路由规则: 2.根URELcof模块,里面定义了 urlpatterns ...
- [转]SQL - Create XML - How to set Unicode UTF-8
本文转自:https://stackoverflow.com/questions/44754356/sql-create-xml-how-to-set-unicode-utf-8 I found a ...
- 定时器--Quartz.Net
这次由于项目的需求:什么定时发送邮件通知,定时筛选取消客户下单未支付的订单 重新捡起定时器,在网上翻来找去找到----Quartz.Net老字号了并不表示它就真的老了哦 github:https:// ...
- 基于Spring Security2与 Ext 的权限管理设计与兑现
基于Spring Security2与 Ext 的权限管理设计与实现 一.Spring Security介绍 Spring Security的前身Acegi,其配置及使用相对来说复杂一些,因为要配置的 ...
- 【游记】Noip2018
Day -1 Noip还有1天,加油!!! 今天上午就肝一肝树形DP,维护一些玄学差分,和前缀数组什么的吧 下午以及晚上搞一搞记忆化搜索和最朴素的DFS这样子吧. 还要打一打板子也是极有必要的qwq ...
- LinkedBlockQueue生产消费源码解析
LinkedBlockQueue自JDK1.5以后提供的一种阻塞队列,遵循生产者消费者模式,实现了BlockQueue接口,如图 从它的名字可以了解到它是采用链表的方式实现了阻塞队列,并且定义了“节点 ...
- Java多线程--并行模式与算法
Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例.单例的好处有: 对于频繁使用的对象可以省去new操作花费的时间: new操作的减少,随之 ...