我寻求一个解决方案来对http api进行速率限制,对于nginx,已经有一个模块HttpLimitReqModule支持此功能。但是参考文档,该模块仅支持每秒和每分钟。每小时/每天的任何解决方案?
答案 0 :(得分:0)
我不知道nginx中的一个函数可以做到这一点。但是,您可以使用auth_request模块将所有传入流量传递给上游Web服务,该服务检查流量并应用速率限制规则。
location / {
auth_request /ratelimiter;
..
Normal configuration settings
}
location /ratelimiter {
proxy_pass http://internalratelimitinghost;
# return a HTTP 200 to allow the request
# return anything else to deny it
}
nginx auth_request。默认情况下不包含该模块,因此您需要将其编译为。
答案 1 :(得分:0)
在某个时候,我需要相同的功能来定义每小时,每天,每周等的速率限制。
我很想先构建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