我正在寻找一种针对HTTP API进行速率限制的解决方案,对于Nginx而言,已经有一个名为HttpLimitReqModule的模块支持此功能。但是根据文档,该模块只支持每秒和每分钟。是否有每小时/每天的解决方案?
我正在寻找一种针对HTTP API进行速率限制的解决方案,对于Nginx而言,已经有一个名为HttpLimitReqModule的模块支持此功能。但是根据文档,该模块只支持每秒和每分钟。是否有每小时/每天的解决方案?
我不知道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。该模块默认未包含,因此您需要进行编译。
在某个时刻,我需要同一个函数来定义每小时、每天、每周等的速率限制。
我一开始想要构建一个 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