控制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 ...
随机推荐
- 将RegEx(正则表达式提取器)与JMeter一起使用
JMeter的,最流行的开源性能测试工具,可以工作正则表达式,用正则表达式提取.正则表达式是一种用于通过使用高级操作提取文本的必需部分的工具.正则表达式在测试Web应用程序时很流行,因为它们可用于验证 ...
- 目前最全的浏览器/CSS选择器兼容性总结(2009-8-10更新)
2009年2月24日,Safari 4.0 beta版正式发布,Safari从它的3.2版本开始就已经支持所有的CSS选择器(包括最新的CSS3).不过为了方便大家的工作,下面提供了最新版本的CSS选 ...
- ubuntu 设置字符集 locale(解决乱码问题)
1.locale 查看现在的locale配置环境 2.localepurge 配置需要的locale(如果没有这个命令,用apt-get install localepurge安装) 3.locale ...
- poj3728The merchant树剖+线段树
如果直接在一条直线上,那么就建线段树 考虑每一个区间维护最小值和最大值和答案,就符合了合并的条件,一个log轻松做 那么在树上只要套一个树剖就搞定了,多一个log也不是问题 注意考虑在树上的话每一条链 ...
- springboot集成log4j
需求: 1.springboot集成log4j 2.mybatis 打印 sql 实现: pom.xml <dependency> <groupId>org.springfra ...
- Win10专业版系统下添加其他国家语言
Win10专业版系统下如何添加其他国家语言?国内的win10专业版系统默认情况下是安装简体中文,但是有的用户出于工作原因需要使用其它字体.比如外国友人就需要使用英语,西班牙等.其实win10专业版是支 ...
- centos下svnadmin的部署过程
1. 安装SVN #yum –y install subversion 2. 安装openjdk #yum –y list java* #yum –y install java-1.8.0 ...
- MS-SQL 时间的操作
1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值 例如:向日期加上2天 select dateadd ...
- java 使用uuid生成唯一字符串
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.按照开放软件基金会(OSF)制定的标准计算, ...
- 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度
我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...