nginx HttpLimitReqModule 是不是支持每小时/每天/每周?

Posted

技术标签:

【中文标题】nginx HttpLimitReqModule 是不是支持每小时/每天/每周?【英文标题】:Does nginx HttpLimitReqModule support per hour/day/week?nginx HttpLimitReqModule 是否支持每小时/每天/每周? 【发布时间】:2013-03-10 10:38:41 【问题描述】:

我寻求一个解决方案来做HTTP API的速率限制,对于nginx,已经有一个模块HttpLimitReqModule支持这个功能。但是参考文档,这个模块只支持每秒和每分钟。每小时/每天的任何解决方案?

【问题讨论】:

你找到解决这个问题的方法了吗? 【参考方案1】:

我不知道 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。默认情况下不包含该模块,因此您需要编译它。

【讨论】:

【参考方案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

【讨论】:

以上是关于nginx HttpLimitReqModule 是不是支持每小时/每天/每周?的主要内容,如果未能解决你的问题,请参考以下文章

nginx limit_req限速设置

linux 怎样重启nginx

linux下如何重启nginx

死磕nginx系列

Nginx一Nginx服务器搭建

nginx 如何检测配置文件的正确性