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

将NGINX配置为仅允许一个唯一的ip每天执行5个POST请求,nginx,nginx-config,Nginx,Nginx Config,我有一个网站,允许用户将他们的zipcode转换为他们的街道地址、城市和一些其他信息。这是一个面向最终用户而非公司的网站。然而,从上周开始,我收到了很多来自几个IP的请求(每天1000个左右),经过一些调试,他们似乎(ab)将我的网站用于商业目的 我希望我的NGINX每天只允许来自唯一IP的5个POST请求,除非这些请求来自我自己的IP(办公室和家庭IP)。我可以接受没有限制的请求。另外,我只希望它适用于这个特定的vhost,而不是我的整个nginx配置。我应该如何进行?这可能吗?Nginx不允

我有一个网站,允许用户将他们的zipcode转换为他们的街道地址、城市和一些其他信息。这是一个面向最终用户而非公司的网站。然而,从上周开始,我收到了很多来自几个IP的请求(每天1000个左右),经过一些调试,他们似乎(ab)将我的网站用于商业目的


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

Nginx不允许速率限制低于每分钟1个请求。但是,您可以使用似乎具有您想要的功能的。使用它,您可以执行以下操作:

limit_req_zone $binary_remote_addr zone=zonepost:10m rate=1r/d; # limit to 1 request per day
然后,在您所在的位置,您可以使用
if
检查请求方法是否为
get
post
,并相应地应用
limit\u req
。例如,您可以设置第二个限制性较小的区域,并将其配置为:

limit_req_zone$binary_remote_addr zone=zonepost:10m速率=5r/d;#每天限5次
限制要求分区$binary远程添加分区=分区:10m速率=10r/s;#每秒限制10次
服务器{
地点/{
#选择正确的区域(限制)
if($request\u method=get){
设置$zone“zoneget”;
}
如果($request\u method=post){
设置$zone“zonepost”;
}
限制要求区域=$区域;
#做其他事情。。。
}
}
有关手册,请参阅