我一直在试验Nginx的速率限制一段时间,有一些行为,我不明白。
我正在使用我的configuration中的突发和nodelay,并按照预期的速率限制工作如果我保持速率和突发一个很小的值(分别低于40req /秒和40左右)。 当我configurationnginx更高的请求率(并相应地调整突发)的时候,我看到更多的请求比预期的由nginx处理。
例如,如果input是1000 req / sec,并且nginx被configuration为在30 req / sec的速率限制下, burst=30且启用了nodelay,则速率限制按预期工作。 然而,在input1000 req / sec和nginxconfiguration为100 req / sec的速率限制的情况下,当burst=100和nodelay被启用时,我没有看到预期的结果。 在这种情况下,Nginx处理的请求数比预期的要多得多。
在一个1000分钟的testing中,总共有60k个请求被推送给Nginx。 Nginx的configuration速率限制为100 req / sec, burst=100 ,我预计只有〜6000个请求会被Nginx处理,其余的应该被删除。 但是,我看到〜50K的请求得到处理。 即使速率为100瑞克/秒, burst=20 ,约25K的请求得到处理。
使用示例configuration:
limit_req_zone $host zone=perhost:10m rate=100r/s;
limit_req zone=perhost burst=100 nodelay;
limit_req_zone $host zone=perhost:10m rate=100r/s;
limit_req zone=perhost burst=20 nodelay;
我保持速度和爆发力相等,以确保如果所有请求都一起login到Nginx,则不会丢失任何请求。