我有一个奇怪的行为我的configuration看起来像这样:
http { limit_req_zone $binary_remote_addr zone=nocachelimit:10m rate=120r/m; } ... location "/api" { { limit_req zone=nocachelimit burst=20; } }
无论我把什么价值放入速度,我甚至尝试1000r / s我不断获得“普通”用户的日志条目,说:
[warn] 16526#0: *4661 delaying request, excess: 1.000, by zone "nocachelimit"
典型的用例是一个不属于区域+ 4-5的Ajax请求的页面负载,它将被限制在区域内。
这种行为可能是什么原因呢?
费率决定了处理请求的速度。 如果将速率设置为120r / m,则意味着每0.5秒处理1个请求。
如果你一次得到5个请求,这并不意味着他们会全部通过。 他们会排队(达到你的爆发大小),并按顺序进行处理,每0.5秒处理一次。
你得到了这个警告,因为事情正在排队,并且推迟了。 这并不意味着他们被拒绝。
如果您不希望事情发生延迟,请使用nodelay参数:
location "/api" { limit_req zone=nocachelimit burst=20 nodelay; }
有关更多详细信息,请参阅https://www.nginx.com/blog/rate-limiting-nginx/