最近公司做了一个砸金蛋的活动,经过几天的发酵宣传后,每天以几万的的用户数在增长,后面才发现原来有人专门为此开发了一个全自动注册的软件
一时间网站被刷得打开异常缓慢,查看日志发现大部分都是用软件在刷,于是想到了在nginx层面去限制用户访问,百度加上自身情况改了下,大致的配置信息如下:
在nginx的http中添加如下语句
http
{
limit_req_zone $binary_remote_addr zone=site_com:10m rate=2r/s;
.....
}
设置一个限制区域,2r/s的意思是每秒最多允许两个进程同时处理
接着在server的php段中添加
location ~ .*\.(php|php5)?$
{
limit_req zone=site_com burst=10;
.....
}
burst的意思是相当于允许排队的进程,即是说如果当前已经有进程在处理中,后面来的进程都必须先进行排队,最多允许10个进程,多出的则直接访问503
基本上配置到这里,就可以了,重新nginx,用ab或者webBench测试,效果卓越
补充:
后面发现cron里的部分任务执行失败,看了下日志是因为本地的进程都也因为访问限制出现了503,后面想到给限制程序加上白名单,代码如下:
http{
geo $whiteiplist {
default 1;
10.162.89.111 0;
113.90.81.206 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
.....
}
再次重启nginx,完美~~