![Nginx - 我可以在 limit_req_zone 中指定每小时请求的速率吗?](https://linux22.com/image/676129/Nginx%20-%20%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%20limit_req_zone%20%E4%B8%AD%E6%8C%87%E5%AE%9A%E6%AF%8F%E5%B0%8F%E6%97%B6%E8%AF%B7%E6%B1%82%E7%9A%84%E9%80%9F%E7%8E%87%E5%90%97%EF%BC%9F.png)
在限制来自 IP 的请求数量时,我正在使用
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
我可以指定利率R M(每分钟请求数)或速度/秒(每秒请求数)。有没有办法指定速率请求数/小时?
例如,我希望速率为 75 个请求/小时。因此它将是 1.25r/m,但 r/m 必须是整数。因此,即使这样也行不通。
请帮帮我。
答案1
根据文档您可以按每秒请求数或每分钟请求数来指定,而不是按每小时请求数来指定,所以这是不可能的。
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.
我建议您根据您的使用情况向上或向下舍入。1r/s 是每分钟 60 个请求,2r/s 是每分钟 120 个请求。
答案2
在某些时候,我需要相同的功能来定义每小时、每天、每周等的速率限制。
我很想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