将NGINX配置为仅允许一个唯一的IP每天执行5个POST请求

我有一个网站,允许用户将其邮政编码转换为街道地址,城市和其他一些信息。这是一个面向最终用户而非公司的网站。但是,自上周以来,我收到了来自几个IP的大量请求(每天约1000个),经过调试后,看来它们正在(滥用)我的网站用于商业目的。

我希望我的NGINX每天只允许来自一个唯一IP的5个POST请求,除非这些请求来自我自己的IP(办公室和家庭IP)。我对GET请求没有限制。另外,我只希望它适用于此特定的虚拟主机,而不适用于我的整个nginx配置。我应该如何进行?这有可能吗?

Jason82918 回答:将NGINX配置为仅允许一个唯一的IP每天执行5个POST请求

Nginx不允许速率限制慢于每分钟1个请求。但是,您可以使用似乎具有所需功能的this custom version of nginx。有了它,您可以执行以下操作:

limit_req_zone $binary_remote_addr zone=zonepost:10m rate=1r/d; # limit to 1 request per day

然后在您的位置,您可以使用if来检查请求方法是get还是post并相应地应用limit_req。例如,您可以设置第二个限制性较小的区域,并进行如下配置:

limit_req_zone $binary_remote_addr zone=zonepost:10m rate=5r/d; # limit 5 per day
limit_req_zone $binary_remote_addr zone=zoneget:10m rate=10r/s; # limit 10 per sec

server {
    location / {
         # Select the right zone (limit)
               if( $request_method = get ) {
                  set $zone "zoneget";
               }
               if( $request_method = post ) {
                  set $zone "zonepost";
               }
               limit_req zone=$zone;
         # Do other stuff...
    }
}

有关手册,请参见this page on nginx.com

本文链接:https://www.f2er.com/3095777.html

大家都在问