有网友反馈到自己的网站被外部刷的太多导致打开缓慢,这里应该是同IP的软件或者人为刷新导致的。这里我们可以通过Nginx限制同IP的访问次数限制。
第一步:限制同一IP地址访问网站的次数
需要在Nginx中进行配置HttpLimit模块,HttpLimit以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)
上面有两种模块配置的使用方法,可根据不同情况设置。
http{
limit_zone one $binary_remote_addr 10m;
limit_req_zone $binary_remote_addr zone=req_one:10m rate=10r/s;
server{
limit_conn one 1;
limit_req zone=req_one burst=1;
}
}
方法1:
limit_zone one $binary_remote_addr 10m;
这里的 one 是声明一个 limit_zone 的名字,$binary_remote_addr是替代 $remore_addr 的变量,10m 是会话状态储存的空间
limit_conn one 1 ,限制客户端并发连接数量为1
方法2:
limit_req_zone $binary_remote_addr zone=req_one:10m rate=10r/s;
rate=10r/m 的意思是每个地址每分钟只能请求10次,也就是说根据令牌桶原理burst=1 一共有1块令牌,并且每分钟只新增10块令牌,
1块令牌发完后多出来的那些请求就会返回503
加上 nodelay 之后超过 burst大小的请求就会直接返回503
如果没有这个字段会造成大量的tcp连接请求等待。
limit_zone两种工作情况
limit_req zone=one burst=10 ;
默认情况下是这样配置的,这样每个请求就会有一个delay时间0
limit_req_zone $binary_remote_addr zone=one:100m rate=10r/m;
就是每分钟有10个令牌供用户使用,每个请求时间就是60/10,那每个请求时间就是6s。
limit_req zone=one burst=10 nodelay;
添加 nodelay 配置,这样就是根据你的网络状况访问,一分钟访问够10次后,服务器直接返回503。
imit_req_zone $binary_remote_addr zone=one:100m rate=10r/m;
就是每分钟有10个令牌供用户使用,会根据网络情况访问url,如果一分钟超过10个令牌,服务器返回503,等待下一个一分钟领取访问令牌。
配置完HttpLimit模块后,重新启动nginx。
最后,我们如果有必要的话也可以安装WordPress防火墙的插件。
本文出处:老蒋部落 » 设置Nginx参数调整同IP访问页面的频率次数 | 欢迎分享( 公众号:老蒋朋友圈 )