Nginx - 我可以在 limit_req_zone 中指定每小时请求数吗?

Mad*_*har 3 nginx web-server rate-limiting

在限制来自IP的请求数量时,我使用

limit_req_zone  $binary_remote_addr zone=one:10m rate=1r/m;
Run Code Online (Sandbox Code Playgroud)

我可以以r/m(每分钟请求数)或r/s(每秒请求数)为单位指定速率。有没有办法指定请求/小时的速率?

例如,我希望速率为 75 个请求/小时。所以它将是 1.25r/m,但 r/m 必须是整数。所以,即使这样也行不通。

请帮帮我。

Dan*_*nin 7

在某些时候,我需要相同的函数来定义每小时、每天、每周等的速率限制。

我很想ngx_http_limit_req_module首先构建一个克隆,但随后只是将必要的更改集成到nginx-mod中。

所以这适用于 nginx-mod:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/h; # 1 request per hour
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/d; # 1 request per day
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/w; # 1 request per week
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/M; # 1 request per month
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/Y; # 1 request per year
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

根据文档,您可以指定每秒请求数或每分钟请求数,而不是每小时请求数,所以这是不可能的。

The rate is specified in requests per second (r/s). If a rate of
less than one request per second is desired, it is specified in
request per minute (r/m). For example, half-request per second
is 30r/m.
Run Code Online (Sandbox Code Playgroud)

我建议您根据您的用例向上舍入或向下舍入。1r/s 是每分钟 60 个请求,2r/s 是每分钟 120 个请求。