写点什么

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

作者:乌龟哥哥
  • 2022 年 5 月 01 日
  • 本文字数:1137 字

    阅读完需:约 4 分钟

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``;``    ``}
复制代码


配置示例截图



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


①、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 等压力测试工具进行测试。

发布于: 刚刚阅读数: 3
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
nginx配置系列(四)请求限制_5月月更_乌龟哥哥_InfoQ写作社区