Nic*_*las 16 nginx rate-limiting
在 Nginx 配置中,当你想通过使用limit_req_zone
/来限制请求处理速率时limit_req instructions
,我不太明白该nodelay
选项的用途。
在我的理解中,它会在不延迟它们的情况下终止超过定义速率的请求。所以它似乎相当于burst=0
. 这就是为什么我不理解以下示例的原因:
limit_req zone=one burst=5 nodelay;
Run Code Online (Sandbox Code Playgroud)
burst
定义了可以延迟的请求数量,那么定义burst
是否有nodelay
选项是什么意思?
Ber*_*set 29
我发现limit_req
文档足够清楚。
burst
是这样记录的:
过多的请求会被延迟,直到它们的数量超过最大突发大小 [...]
nodelay
是这样记录的:
如果不希望在限制请求时延迟过多请求,则应使用参数 nodelay
请求仅限于符合定义的速率。如果请求以更高的速率传入,则不会为每个时间单位提供超过定义数量的请求。然后,您需要决定如何处理这些其他请求。
burst
, no nodelay
),请求会被拒绝并出现 HTTP 503 错误。burst
,您可以在等待队列中堆叠定义数量的请求,但处理它们的速度不会比单位时间单位速率定义的请求更快。burst
and nodelay
,队列不会等待,请求突发将立即得到处理。小智 10
通过burst
andnodelay
指定,我发现更容易理解这样的机制(与通常理解的相反):
burst
。这$binary_remote_addr
是您从给定地址接受的最大请求数。每个请求都会增加一个内部计数器。当计数器达到该值时,burst
所有其他请求都会被拒绝(并且计数器不会增加到超出burst
值)。rate
。这种逻辑表明,指定一个高burst
值(例如 100 或更高)和一个低值rate
(甚至类似于 2r/s)是非常有意义的。这可以更好地处理正常浏览(一批并行请求,然后是一段安静期),同时防止持续的机器人请求流。
小智 8
对原始答案的评论似乎是错误的。
手头的问题是有什么区别,比如 rate=6r/s burst=0 和 rate=1r/s burst=5 nodelay
答案很好地解释了当 nodelay 选项不存在时的差异——在这种情况下,请求与突发一起排队,并且在没有突发的情况下是 503'd。
原始答案似乎是正确的 - 使用 nodelay,突发请求会立即得到处理。因此,唯一的含义是指定突发 + nodelay 与首先指定 busrt=0 的上限之间没有区别。
因此,更简洁地回答OP问题:指定nodelay时burst的含义与仅指定更大速率而未burst的含义相同。
归档时间: |
|
查看次数: |
10442 次 |
最近记录: |