控制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;
上下文http\server\location
用于指定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个请求排队等待
} }
控制nginx并发链接数量和客户端请求nginx的速率的更多相关文章
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- [Go] 利用有缓存channel控制同时并发的数量
如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决 package main import "t ...
- Nginx优化防爬虫 限制http请求方法 CDN网页加速 架构优化 监牢模式 控制并发量以及客户端请求速率
Nginx防爬虫优化 Robots协议(也称为爬虫协议,机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- Java--Semaphore控制并发线程数量
package com; import java.util.concurrent.Semaphore; /** * Created by yangyu on 16/11/28. */ /** * Se ...
- java nginx等代理或网关转发请求后获取客户端的ip地址,原理
在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...
- Apache与Nginx对客户端请求的处理机制对比
Apache与Nginx对客户端请求的处理机制对比 模块 大致为四个模块,核心模块.HTTP模块.邮件模块,以及第三方模块 核心模块主要包含两类功能的支持,一类是主体功能,包括进程管理,权限管理,错误 ...
- nginx截获客户端请求
使用nginx可以直接截获客户端请求,以下是最近收集的一些判断截获的信息的配置,为查看方便记录如下: 1.根据UA和cookie判断当前是移动端还是PC端访问: if ($http_host !~ & ...
- Identity4实现服务端+api资源控制+客户端请求
准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...
- windows+nginx 查看并发链接数
1.windows下nginx查看并发链接数要使用stable版本 2.配置代码: location /status { stub_status on; } 3.访问地址:http://localho ...
随机推荐
- JavaScript进阶 - 第4章 跟着我的节奏走(流程控制语句)
第4章 跟着我的节奏走(流程控制语句) 4-1 做判断(if语句) if语句是基于条件成立才执行相应代码时使用的语句. 语法: if(条件) { 条件成立时执行代码} 注意:if小写,大写字母(IF) ...
- 上传、裁剪图片-----Jcrop图片裁剪插件
Jcrop文档:http://code.ciaoca.com/jquery/jcrop/C#裁剪:http://www.cnblogs.com/xyang/archive/2013/02/25/293 ...
- Jenkins+Gitlab+Ansible自动化部署(四)
接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...
- SSRS-lookupSet-DataSet-分组查询
SSRS-lookupSet-DataSet-分组查询 来源:http://www.cnblogs.com/biwork/p/3621885.html 目录:http://www.cnblogs.co ...
- windows 2008 r2或win7安装SP1补丁,安装sqlserver 2012
说明:安装sql server 2012时,win7和win2008r2系统都需要打sp1补丁. 1.SP1补丁下载地址(建议用迅雷下载): http://download.microsoft.com ...
- Java输入输出流简单案例
package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...
- MVC下载文件方式 包括网络地址文件
MVC下载文件方式 方式一: public FileStreamResult DownFile(string filePath, string fileName){ string absol ...
- 死磕 java原子类之终结篇(面试题)
概览 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割 ...
- 架构演进历程及为什么选择Spring Cloud
单体式架构: 垂直拆分: 垂直拆分的特点: 分布式服务: 分布式服务的特点: SOA面向服务的架构: 服务治理: 微服务: 微服务结构: 服务调用方式: http客户端工具:
- To the world you may be one person, but to one person you may be the world.
To the world you may be one person, but to one person you may be the world.对于世界而言,你是一个人:但对于某人而言,你是他的 ...