技术解析

nginx limit_req 模块的问题
0
2021-05-25 17:34:18
idczone

为啥这样设置以后,用自己的压力测试工具测试,不到 100 个并发就触发了 503 ? rate 我是设置的 3000 并发每秒啊

limit_req_zone $binary_remote_addr 抗投诉服务器zone=req:20m rate=3000r/s; limit_req zone=req nodelay;


压力测试是并发,不是并发 /秒
同时发出 100 个请求,处理完 1 个请求,马上再发 1 个
就是说,并发只保证任一时刻,都有 100 个请求压着服务器,而不是每秒只发 100 个请求

是我没讲清楚,我的测试工具 1 秒内总共发出不到 100 个请求

那你把测试参数和测试结果, nginx 日志贴上来啊
说一半都只能靠猜

nginx.conf :
http{
...
limit_req_zone $binary_remote_addr zone=one:10m rate=3000r/s;
limit_req zone=one nodelay;
}
测试工具我自己写的,就起 20 个线程循环访问网站, 1 秒内的请求书达不到 3000 的, nginx errlog:
2016/07/26 13:42:55 [error] 31706*3954481 limiting requests, excess: 1.000 by zone "one", client: x.x.x.x, server: , request: "GET /hello HTTP/1.1", host: "x.x.x.x", referrer: ""

binary_remote_addr 因为是这个 要看你测试的页面情况 话说干嘛不用别人造好的 waf 轮子 比如 verynginx

$binary_remote_addr 不是客户端 IP 么?页面情况是指啥?

你试试测试的文件单 echo hello word 试试 然后再这个文件基础上 输出个笑脸图片 比如 img ./haha.png a 标签是 域名 /haha.png 再试试

是想说,测试工具把页面上的元素包括图片和 css js 等也请求了所以超过了 rate ?并没有,而且无论我设置 rate 多大,都会 503

因为不清楚你的具体环境还有测试工具 只能说 页面中的 css js 图片之类的也是统计在 binary_remote_addr 中的 你那个限制不管设置多大都是 503 的话没法判断问题 你可以试试测试一个简单的 hello world 页面 测试工具 试试 ab

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服