当每分钟限制请求数时,nginx 的令牌桶多久补充一次?

当每分钟限制请求数时,nginx 的令牌桶多久补充一次?

我们决定尝试限制我们网站上每分钟的请求数,而不是每秒的请求数。然而,我对突发参数在此背景下。

我的印象是,当你使用“nodelay”标志时,速率限制功能就像一个令牌桶而不是漏桶。在这种情况下,桶大小等于突发参数,每次您违反策略(例如 1 req/s),您都必须将一个令牌放入桶中。一旦桶满了(等于突发设置),您就会收到 503 错误页面。

我还认为,一旦违反者停止违反政策,就会以 1 个令牌/秒的速率从存储桶中删除一个令牌,以允许他重新访问该网站。

假设我上述内容正确,我的问题是当我开始控制每分钟的访问量时会发生什么?如果我们选择每分钟 60 个请求,那么令牌桶的补充速率是多少?

答案1

从我的实验来看,每分钟似乎只是一种以亚秒为间隔写入速率的方法。所以 60r/m == 1r/s。这可以通过将其设置为每分钟 60 个请求,然后每秒发起 2 个请求来证明。它将从一开始就受到限制,而不仅仅是在发出 60 个请求之后。

话虽如此,我仍然不完全理解这一切是如何运作的:-)

答案2

是的,它确实像令牌桶算法一样工作。我也手动尝试了我的服务器来验证这一点。你可以看到https://stackoverflow.com/questions/14869390/nginxngx-http-limit-req-module-for-how-long-is-503-returned-once-exceeding-the例如

如果您选择 60 req/min,它将每秒补充一个令牌。

相关内容