Nginx 如何实施超长利率限制?

Nginx 如何实施超长利率限制?,nginx,Nginx,对于我的大多数网站,我的正常速率限制为每秒1个请求: limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 我现在需要一个特定的位置每天10的限制。可能吗 limit_req_zone $binary_remote_addr zone=loginmin:10m rate=1tth; 我从你链接的文章中得到:无效率“rate=1th” 在源代码审查之后,我找到了一种方法,可以将最低速率降低到每天86个请求。下面的补丁增加了使用下一

对于我的大多数网站,我的正常速率限制为每秒1个请求:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
我现在需要一个特定的位置每天10的限制。可能吗

limit_req_zone $binary_remote_addr zone=loginmin:10m rate=1tth;

我从你链接的文章中得到:无效率“rate=1th”

在源代码审查之后,我找到了一种方法,可以将最低速率降低到每天86个请求。下面的补丁增加了使用下一个配置指令的能力:

从中可以学到两件事:

  • 您需要修补Nginx的源代码,才能使本文中的方法起作用
  • 即使有了补丁,您也只能将其限制为每天86个请求
  • 因此,我们可以得出结论,仅使用Nginx目前不可能实现您想要的功能

    我的建议是为此使用
    fail2ban
    。您可以创建自定义监狱:

    # /usr/local/etc/fail2ban/jail.d/nginx-extreme-ratelimit.local
    
    [nginx-extreme-ratelimit]
    enabled  = true
    filter   = nginx-ratelimit
    action   = pf <-- or ufw, ipfilter, ipfw, whatever firewall you use
    logpath  = /var/log/nginx-access.log
    findtime  = 86400
    maxretry = 10
    bantime  = 86400
    
    使用,您可以简单地说:

    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/d;
    
    当然,使用此配置时,您的流量应该足够小(速率有限资源的访问量应该少于160K)


    或者,您需要将区域的内存大小调整为足够大,以便在24小时内将所有访客IP地址容纳到速率有限的资源中。

    tth
    不是有效的度量。你是怎么想到这个的?@Herrbishoff
    00 00 * * * /usr/local/bin/fail2ban-client set nginx-extreme-ratelimit unbanip 1.2.3.4
    
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/d;