相关文章:

《高可用服务设计之二:Rate limiting 限流与降级》

《nginx限制请求之一:(ngx_http_limit_conn_module)模块》

《nginx限制请求之二:(ngx_http_limit_req_module)模块》

《nginx限制请求之三:Nginx+Lua+Redis 对请求进行限制》

《nginx限制请求之四:目录进行IP限制》

对应nginx接入层限流可以使用Nginx自带的两个模块:

  • 连接数限流模块ngx_http_limit_conn_module:
  • 漏桶算法实现的请求限流模块ngx_http_limit_req_module

ngx_http_limit_conn_module 对于一些服务器流量异常、负载过大,甚至是大流量的恶意攻击访问等,进行并发数的限制;该模块可以根据定义的键来限制每个键值的连接数,只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。

该模块提供了两个配置参数,limit_conn_zone 和 limit_conn ,

其中 limit_conn_zone 只能配置在 http{} 段,而 limit_conn 则可以配置于http{},server{},location{} 区段中。


三方模块编译安装参数:


、 limit_conn_zone

语法:limit_conn_zone $variable zone=name:size; 
配置段:http

参数说明:

  • $variable:定义键,要限流的维度;
  • zone=name: 定义区域名称(名称随意起名),主要作用与后面的 limit_conn中对应就好。
  • size: 定义各个键共享内存空间大小。

该指令描述会话状态存储区域。键的状态中保存了当前连接数,键的值可以是特定变量的任何非空值(空值不会被考虑)。

如:

#限制连接数
limit_conn_zone $binary_remote_addr zone=showjoy_conn:20m;

注释:

客户端的IP地址作为键。注意,这里使用的是 binary_remote_addr 变量,而不是 remote_addr 变量。 
remote_addr变量的长度为7字节到15字节,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。 
binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。 
1M共享空间可以保存3.2万个32位的状态,1.6万个64位的状态。 
如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。


、limit_conn

语法:limit_conn zone_name number 
配置段:http,server,location

参数说明:

  • zone_name是上面limit_conn_zone中的zone定义的;
  • number:是并发连接数量;

该指令指定每个给定键值的最大同时连接数,当超过这个数字时返回503(Service )错误。limit_conn是对某个key对应的总的网络连接数进行限流。可以按照IP来限制IP维度的总连接数,或者按照服务域名来限制某个域名的总的连接数。(只有那些被nginx处理的且已经读取了整个请求头的请求连接才会被计数器统计)。

如(同一IP同一时间只允许有20个连接):


、配置使用示例

limit_conn_zone $binary_remote_addr zone=showjoy_conn:20m; 
主要用来定义变量、zone名称、共享内存大小

limit_conn showjoy_conn 20; 
将前面定义的showjoy_conn进行配置,并且限制同一IP并发连接数为20

配置方法如下:

1、在nginx.conf里的http{}里加上如下代码:

  1. #ip limit
  2. limit_conn_zone $binary_remote_addr zone=perip:10m;
  3. limit_conn_zone $server_name zone=perserver:10m;

2、在需要限制并发数和下载带宽的网站配置server{}里加上如下代码:

  1. limit_conn perip 2;
  2. limit_conn perserver 20;
  3. limit_rate 100k;

补充说明下参数:

  • $binary_remote_addr是限制同一客户端ip地址;
  • $server_name是限制同一server最大并发数;
  • limit_conn为限制并发连接数;
  • limit_rate为限制下载速度;

注意:
nginx 1.1.8 之后的版本的语法改为limit_conn_zone $binary_remote_addr zone=NAME:10m;
NAME 就是 zone 的名字详情请看这里 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
限制连接数:
要限制连接,必须先有一个容器对连接进行计数,在http段加入如下代码:
"zone=" 给它一个名字,可以随便叫,这个名字要跟下面的 limit_conn 一致
$binary_remote_addr = 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话
... 省掉 N 字
http
{
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    接下来需要对server不同的位置(location段)进行限速,比如限制每个IP并发连接数为1,则
server
{
    listen 80;
    server_name 192.168.11.128;
    index index.html index.htm index.php;
    limit_conn addr 1; #是限制每个IP只能发起1个连接 (addr 要跟 limit_conn_zone 的变量对应)
    limit_rate 100k; #限速为 100KB/秒
    root html;
注意事项:
limit_rate 100k; //是对每个连接限速100k。这里是对连接限速,而不是对IP限速!如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate *


、使用注意事项

事务都具有两面性的。ngx_http_limit_conn_module 模块虽说可以解决当前面临的并发问题,但是会引入另外一些问题的。如前端如果有做LVS或反代,而我们后端启用了该模块功能,那不是非常多503错误了?这样的话,可以在前端启用该模块,要么就是设置白名单。

模块地址:https://yunpan.cn/cqSKP6BrJ2AeT 访问密码 4f50

转载于:https://www.cnblogs.com/duanxz/p/3977756.html

nginx限制请求之一:(ngx_http_limit_conn_module)模块相关推荐

  1. nginx限制请求之四:目录进行IP限制

    相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...

  2. nginx转发请求_Nginx为什么高效?一文搞明白Nginx核心原理

    Nginx 的进程模型 Nginx 服务器,正常运行过程中: 多进程:一个 Master 进程.多个 Worker 进程 Master 进程:管理 Worker 进程 对外接口:接收外部的操作(信号) ...

  3. nginx 一个请求发给多台机器_Nginx系列二:负载均衡与反向代理

    一.负载均衡 1.什么是负载均衡 随着请求数的快速增长,单服务器已经无法承担大量用户的并发访问,这个时候,就需要建立服务器集群,来让多台服务器协同工作,提高整体项目的吞吐量和QPS.假设一台设备资源占 ...

  4. Nginx会话保持之nginx-sticky-module模块

    在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:  1.ip hash,根据客户端的IP,将请求分配到不同的服务器上  2.cookie,服务器给客户端下发一个cookie,具有特定cooki ...

  5. nginx子请求并发处理

    https://blog.csdn.net/ApeLife 子请求并非http协议标准的实现,可以说是nginx所特有的设计, 为什么需要子请求呢? 一般认为这主要是为了提高nginx内部对单个客户端 ...

  6. nginx的请求接收流程(二)

    在ngx_http_process_request_line函数中,解析完请求行之后,如果请求行的uri里面包含了域名部分,则将其保持在请求结构的headers_in成员的server字段,heade ...

  7. nginx会话保持值sticky模块

    阅读目录 1.Sticky工作原理 2.重新编译nginx增加nginx-sticky-module模块 3.sticky模块的使用 4.其他的参数:语法 5.其他需要注意的 nginx会话保持之ng ...

  8. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)

    nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来 ...

  9. Nginx系列1之部分模块详解

    1 内核模块: 名称: daemon 语法: daemon on |off 默认值: on 功能: 决定nginx 在前台执行还是后台守护进程执行的 ================== 名称: En ...

最新文章

  1. 夏天写代码真难!16G 内存根本不够用! | 每日趣闻
  2. 关于align=absmiddle的说明
  3. matlab中随机函数的具体使用方法
  4. 直播预告:基于动态词表的对话生成研究 | PaperWeekly x 微软亚洲研究院
  5. 使用BeetleX构建基础的SSL网络通讯
  6. strictmath_Java StrictMath ceil()方法与示例
  7. Ubuntu查看及修改IP地址
  8. iWebOffice一些相关
  9. echarts2 的引入方式
  10. iec104点号_IEC104规约报文说明(104报文解释的较好的文本)
  11. Android安全论文汇集
  12. DragonBones(龙骨动画)在Unity端的使用
  13. c++ 函数重载(简单易懂)
  14. 5-网站日志分析案例项目回顾与点击流数据分析项目介绍
  15. uniapp 自定义导航栏 动态显示或隐藏返回图标 以及buttons
  16. 详解Python中列表切片及浅拷贝的关系(上)
  17. webView系列(五)----历史记录
  18. 混淆矩阵、召回率、精确率、正确率、F1、真阳性率、假阳性率、ROC、AUC
  19. cmake:基于MDK(Keil)的Nationstech.N32G45x平台交叉编译工具链定义
  20. 如何搭建适合自己团队的构建部署平台

热门文章

  1. 数据库实验2:数据库的建立与维护
  2. UnityGI2:Lightmaps
  3. OpenGL基础14:摄像机
  4. bzoj 3626: [LNOI2014]LCA(离线差分+树链剖分)
  5. 喵哈哈村的嘟嘟熊魔法(四)(set+对组)
  6. python库skimage 绘制二值图像的凸壳
  7. 流媒体服务器设计文档,流媒体服务器设文档.doc
  8. WebSocket API 学习笔记
  9. BZOJ3209(luogu 4317)花神的数论题题解
  10. Proc恢复数据文件