nginx配置系列(四)请求限制

举报
炒香菇的书呆子 发表于 2022/05/01 21:41:17 2022/05/01
【摘要】 ngx_http_limit_req_module 模块该模块一般应用在以下场景:①、秒杀、抢购并发限制②、下载带宽限制③、防止攻击详细说明:ngx_http_limit_req_module 模块可以限制请求ip单位时间内的请求次数的作用。限制请求数能一定程度上降低nginx以及nginx作为代理时对恶意的请求访问压力。同时,对于非恶意的高频率请求,一定程度上降低了nginx或者后端服务...

ngx_http_limit_req_module 模块

该模块一般应用在以下场景:

①、秒杀、抢购并发限制

②、下载带宽限制

③、防止攻击

详细说明:

ngx_http_limit_req_module 模块可以限制请求ip单位时间内的请求次数的作用。限制请求数能一定程度上降低nginx以及nginx作为代理时对恶意的请求访问压力。同时,对于非恶意的高频率请求,一定程度上降低了nginx或者后端服务器的负载。 当然了,该模块对使用ab等工具恶意压测服务器和CC(challenge Collapsar)攻击会有一定的防范作用。

配置语法说明:

语法:limit_req_zone $variable zone=name:size rate=rate;

默认值: none

配置段:http

简单配置示例:

limit_req_zone $binary_remote_addr zone=``test``:10m rate=1r``/s``;`` ` ` ``location / {``      ``limit_req zone=``test``;``    ``}

配置示例截图

n1.png

以上配置示例中的配置参数说明:

①、 b i n a r y r e m o t e a d d r 表示通过 r e m o t e a d d r 这个标识来做限制,“ b i n a r y 的目的是缩写内存占用量,是限制同一客户端 i p 地址。使用 binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。使用 binary_remote_addr 变量,可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。另外,$binary_remote_addr 是nginx中的众多内置变量中的一个,它表示 客户端地址的二进制形式,,固定长度为4个字节。

②、zone=test:10m 表示生成一个大小为10M,名字为test的内存区域,用来存储访问的频次信息。如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503(Service Temporarily Unavailable)错误。

③、rate=1r/s 表示允许相同标识的客户端的访问频次,这里限制的是每秒1次(允许1秒钟不超过1个请求),还可以有比如30r/m的。速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数。

④、zone=test 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name(这里也就是test)对应

可选配置参数说明如下:

①、rate=10r/s 表示允许1秒钟之内最多有10个请求

②、burst=5 表示允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。

③、nodelay 超过的请求不被延迟处理。也就是说,如果不希望超过的请求被延迟处理,可以用nodelay参数。注意:如果设置了该参数,超过访问频次而且缓冲区也满了的时候就会直接返回503错误。

可选参数配置示例:

limit_req zone=``test` `burst=5 nodelay;

进行测试(不要忘了重启nginx或平滑重启)

浏览器访问 nginx.css3er.com 页面正常,不过 按照我们现在的配置,如果你1秒钟内多次刷新页面 浏览器就会时不时的显示503(Service Temporarily Unavailable) 的错误 。

或者自己用ab等压力测试工具进行测试。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。