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配置使用详解相关推荐

  1. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  2. nginx下gzip配置参数详解

    这篇文章主要介绍了nginx下gzip配置参数详解,本文同时给出了配置例子,以及一些注意事项,需要的朋友可以参考下 Nginx自带的有gzip模块 http://wiki.nginx.org/Ngin ...

  3. 从一份配置清单详解Nginx服务器配置

    概述 在前面<Nginx服务器开箱体验> 一文中我们从开箱到体验,感受了一下Nginx服务器的魅力.Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理.负载均衡.缓存 ...

  4. Nginx内置变量以及日志格式变量参数详解

    Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有 ...

  5. Apollo微服务配置中心详解

    Apollo微服务配置中心详解 前言 一.Apollo架构 (一)简介 (二)角色介绍 (三)服务端实现 (四)客服端实现 二.Apollo部署 (一)准备数据库 (二)配置服务 1. 手动部署 (1 ...

  6. 【夯实Spring Cloud】Spring Cloud分布式配置中心详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  7. php.ini配置中文详解

    php.ini配置中文详解 ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目 ...

  8. Dockerfile配置指令详解

    Dockerfile配置指令详解 一.FROM 二.RUN 三.CMD 四.EXPOSE 五.ENV 六.ADD 七.COPY 八.ENTRYPOINT 九.VOLUME 十.USER 十一.WORK ...

  9. asterisk配置文详解

    asterisk配置文详解 Configuration GuideYou've  installed Asterisk and verified that it will  start up.Now ...

最新文章

  1. 精通python网络爬虫-精通python网络爬虫
  2. 惨一个字!Windows 10 October 2018 Update市占率太低
  3. C#.NET里面抽象类和接口有什么区别
  4. watch 和 computed
  5. 手机MODEM 开发(29)--- VoLTE协议
  6. vb.net服务器启动后cpu占用了70_服务器如何区分攻击类型?
  7. 吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)
  8. (四)机器学习方法的分类
  9. Android锁屏Demo
  10. Java基础编程实现2-面向对象-类
  11. 无人机民航执照、多旋翼、固定翼视距内驾驶员、机长考证试题
  12. IOS应用程序启动显示白屏或黑屏
  13. 如何把FLAC音频转换成MP3格式
  14. ASP.NET Web程序设计 第六章 三层架构
  15. 计算机网络(五):IPv6
  16. 微信小程序页面分享出去后用户无法通过分享页面返回首页bug解决方法
  17. MySQL UPDATE 更新
  18. 经典的深度强化学习劝退文读后感
  19. 硬盘 NTFS格式 与 exFAT格式 的比较
  20. 知乎高赞:31岁零基础转行程序员,目前35了,网友:脸皮要厚,才能熬过35~

热门文章

  1. Handoff 指南
  2. Do not use “@ts-ignore“ because it alters compilation errors
  3. 2021年6月17日大学英语四一课一练阅读理解2-1
  4. 特殊形状图片之遮罩蒙版CSS3-Mask效果
  5. 深度丨中科院田捷博士:基于医疗大数据和AI技术的影像组学及其应用丨CCF-GAIR 2017...
  6. 安装完MSBuild (Visual C++ 2015)平台工具集,项目属性页怎么都是英文?有办法解决!
  7. 中建等12家中国公司涉欺诈贿赂被世行列入黑名单
  8. XDAG: PoW + DAG
  9. LINUX下实现软件看门狗的思路
  10. 百度地图的Referer白名单如何填写