控制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 ...
随机推荐
- js 获取两个日期相差的天数--自定义方法
//获取两个日期的相差天数 datedifference=function(sDate1, sDate2) { var dateSpan, tempDate, iDays; sDate1 = Date ...
- HDU-1179-Ollivanders(二分图最大匹配)
链接:https://vjudge.net/problem/HDU-1179 题意: 有n个法师和m个魔棒,每个法师喜欢多种魔棒,但每个法师只能在喜欢的魔棒中选一个. 求最多有几个法师能选到魔棒. 思 ...
- HDU1409 Is It a Number
http://acm.hdu.edu.cn/showproblem.php?pid=1409 没啥好说的,至今也不知道到底错在哪里了,看了discuss才过的 #include <iostrea ...
- 学习flask的网址
学习flask的网址: http://www.bjhee.com
- 项目模板eShopOnContainers
.NET Core多平台项目模板eShopOnContainers编译手记 之前写了一个功能性的文件上传asp.net core的小程序,加上点七七八八的东西,勉强能够应付了,打算学习一下微软的官 ...
- 069 Sqrt(x) 求平方根
实现 int sqrt(int x) 函数.计算并返回 x 的平方根.x 保证是一个非负整数.案例 1:输入: 4输出: 2案例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., ...
- (转)磁盘阵列RAID原理、种类及性能优缺点对比
磁盘阵列RAID原理.种类及性能优缺点对比 原文:http://www.cnblogs.com/chuncn/p/6008173.html 磁盘阵列(Redundant Arrays of Indep ...
- c#进行MD5加密方式和解密算法
--------------- 因为加密个解密都需要用到key所有在加密的后需要把key和加密码都存到数据库中 /// <summary> /// 唯一加密方式 /// </summ ...
- mongodb的创建删除数据库
1.创建数据库 use 命令 MongoDB use DATABASE_NAME 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库. 语法: use DATABASE ...
- 1126 数字统计 2010年NOIP全国联赛普及组
1126 数字统计 2010年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 请统计某个 ...