nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用详解
Nginx请求限制模块ngx_http_limit_req_module、流量限制模块ngx_stream_limit_conn_module基于令牌桶算法,可以通过limit_conn_zone 和limit_req_zone这两个组件来对客户端访问目录和文件的访问频率和次数进行限制。可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制。如能善用此模块能够对 cc、ddos等此类的×××进行有效的防御。
对于提供下载的网站,肯定是要进行流量控制的,例如软件下载站、视频服务等。它也可以减少一些爬虫程序或者DDOS的×××。
案例
http
{
limit_zone one $binary_remote_addr 20m;
limit_req_zone $binary_remote_addr zone=req_one:20m rate=12r/s;
limit_conn one 10;
limit_req zone=req_one burst=120;
server {listen 80;server_name xxx.xxx.com ;location / {root /var/www/tomener;limit_conn addr 5; #是限制每个IP只能发起5个连接limit_rate 100k; #限速为 100KB/秒}}
}
nginx连接数限制模块
1、limit_conn指令
语法: limit_conn zone number;
默认值: —
使用字段: http, server, location
指定一个zone的每个key最大连接数
限制每个name对应客服端的连接数,比如上面的limit_conn addr 5;意思就是现在addr这个name对应的客服端的连接数,比如name对应的是45.168.68.202这个ip地址,那么这个ip最多有5个并发连接,那什么并发呢?像这样的连接,请求到达并已经读取了请求头信息到响应头信息发送完毕,在这个过程中的连接,当一个客服端的并发连接达到我们设置的5个以上时,会返回503 (Service Temporarily Unavailable) 错误
这里,小伙伴对这个zone估计还是有一些疑问,有疑问可以在下面评论,大家一起讨论,比如,有人可能会问,一个客服端占用5个,那么327680只能容纳65536个客服端,那么第65537个客服端就会返回503错误
limit_conn_zone
语法:
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
看上面的语法,limit_conn_zone只能用在http段,例如:
http {limit_conn_zone $binary_remote_addr zone=addr:10m;server {listen 80;server_name www.tomener.com tomener.com;location / {root /var/www/tomener;index index.php index.html index.htm;limit_conn addr 5; #是限制每个IP只能发起5个连接limit_rate 100k; #限速为 100KB/秒}}
}
对于关系:key => $binary_remote_addr #二进制的IP地址name => addr #随便取的一个名字,比如,你可以取成abcsize => 10m #空间大小,这里是10兆一个二进制的ip地址在32位机器上占用32个字节,在64位机器上占用63个字节,那么10M可以存放多少呢,计算一下,10x1024x1024/32 = 327680,意思就是可以存放326780个ip地址(32位),64位可以存放163840个ip
1、key:键,可以说是一个规则,就是对客户端连接的一个标识,比如上面用的是IP地址,比如我们可以用$query_string,例如:/index.php?mp=138944093953,那我们就可以根据mp的值来限制连接数,更多的nginx内置变量请查看http://nginx.org/en/docs/varindex.html2、zone:共享内存空间,作用:保存每个key对应的连接数3、size:共享内存空间大小,如1M、10M、100K
当共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误
limit_conn_log_level指令
Syntax: limit_conn_log_level info | notice | warn | error;
Default: limit_conn_log_level error;
Context: http, server, location
说明:当达到最大限制连接数后,记录日志的等级。
limit_conn_status指令
Syntax: limit_conn_status code;
Default: limit_conn_status 503;
Context: http, server, location
说明:当超过限制后,返回的响应状态码,默认是503,现在你就知道上面为什么会返回503(Service Temporarily Unavailable)服务暂时不可用
例子:
1、同时限制ip和虚拟主机最大并发连接
http {limit_conn_zone $binary_remote_addr zone=perip:10m;limit_conn_zone $server_name zone=perserver:10m;server {location / {limit_conn perip 10;limit_conn perserver 1000;}}
}
2、根据请求参数来限制
#请求:http://www.tomener.com/item.html?mp=1967464354&id=43566929485
limit_conn_zone $mp_limit_key zone=mp:10m;server {set $mp_limit_key $binary_remote_addr; #key设置默认值if ( $query_string ~ .*mp=(\d+).* ) {set $mp_limit_key $1;}location / {limit_conn mp 10;}
}
ngx_http_limit_req_module
limit_req_zone
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
ngx_http_limit_req_module模块的使用和ngx_http_limit_conn_module模块差不多,这里暂时不在讲述,可查看官方文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
nginx访问限制模块limit_conn_zone 和limit_req_zone配置使用详解相关推荐
- 九爷带你了解 nginx 日志配置指令详解
nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...
- nginx下gzip配置参数详解
这篇文章主要介绍了nginx下gzip配置参数详解,本文同时给出了配置例子,以及一些注意事项,需要的朋友可以参考下 Nginx自带的有gzip模块 http://wiki.nginx.org/Ngin ...
- 从一份配置清单详解Nginx服务器配置
概述 在前面<Nginx服务器开箱体验> 一文中我们从开箱到体验,感受了一下Nginx服务器的魅力.Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理.负载均衡.缓存 ...
- Nginx内置变量以及日志格式变量参数详解
Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...
- Apollo微服务配置中心详解
Apollo微服务配置中心详解 前言 一.Apollo架构 (一)简介 (二)角色介绍 (三)服务端实现 (四)客服端实现 二.Apollo部署 (一)准备数据库 (二)配置服务 1. 手动部署 (1 ...
- 【夯实Spring Cloud】Spring Cloud分布式配置中心详解
本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...
- php.ini配置中文详解
php.ini配置中文详解 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目 ...
- Dockerfile配置指令详解
Dockerfile配置指令详解 一.FROM 二.RUN 三.CMD 四.EXPOSE 五.ENV 六.ADD 七.COPY 八.ENTRYPOINT 九.VOLUME 十.USER 十一.WORK ...
- asterisk配置文详解
asterisk配置文详解 Configuration GuideYou've installed Asterisk and verified that it will start up.Now ...
最新文章
- 精通python网络爬虫-精通python网络爬虫
- 惨一个字!Windows 10 October 2018 Update市占率太低
- C#.NET里面抽象类和接口有什么区别
- watch 和 computed
- 手机MODEM 开发(29)--- VoLTE协议
- vb.net服务器启动后cpu占用了70_服务器如何区分攻击类型?
- 吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)
- (四)机器学习方法的分类
- Android锁屏Demo
- Java基础编程实现2-面向对象-类
- 无人机民航执照、多旋翼、固定翼视距内驾驶员、机长考证试题
- IOS应用程序启动显示白屏或黑屏
- 如何把FLAC音频转换成MP3格式
- ASP.NET Web程序设计 第六章 三层架构
- 计算机网络(五):IPv6
- 微信小程序页面分享出去后用户无法通过分享页面返回首页bug解决方法
- MySQL UPDATE 更新
- 经典的深度强化学习劝退文读后感
- 硬盘 NTFS格式 与 exFAT格式 的比较
- 知乎高赞:31岁零基础转行程序员,目前35了,网友:脸皮要厚,才能熬过35~
热门文章
- Handoff 指南
- Do not use “@ts-ignore“ because it alters compilation errors
- 2021年6月17日大学英语四一课一练阅读理解2-1
- 特殊形状图片之遮罩蒙版CSS3-Mask效果
- 深度丨中科院田捷博士:基于医疗大数据和AI技术的影像组学及其应用丨CCF-GAIR 2017...
- 安装完MSBuild (Visual C++ 2015)平台工具集,项目属性页怎么都是英文?有办法解决!
- 中建等12家中国公司涉欺诈贿赂被世行列入黑名单
- XDAG: PoW + DAG
- LINUX下实现软件看门狗的思路
- 百度地图的Referer白名单如何填写