近段时间网站受到攻击,访问网站经常返回502,也是没得闲下来,跟他们斗智斗勇慢慢知道了很多防刷防攻击的配置。
由于我网站架构是nginx+php+wordpress构成的,对于此优化仅仅限于linux、nginx和php配置的优化。下面给大家一一讲解。
分类命令:
|
|
一、php的配置
1.1 配置请求的时间
首先设置下请求时间,不过看情况来设置,如果受到攻击应该配置短些。下面例子为配置300s,如果位置仅仅是小部分人使用或者是统计分析业务,可以设置长些到300s。其他的如果是面对公众的,还是设置短些好。
php-fpm的配置:
1.2 启用opcache
启用opcache后,php部分源码会缓存到内存里面,加速读取,建议开启。
二、nginx配置
2.1 nginx查看并发连接数
这个操作难度稍大,要在编译nginx时加上--with-http_stub_status_module
,然后配置Nginx.conf,在server点里面加入如下内容:
然后可以通过浏览器访问 http://localhost/status
查看,如下图
各个参数的解读如下:
Active connections
:当前 Nginx 正处理的活动连接数。server accepts handledrequests
:总共处理了8 个连接 , 成功创建 8 次握手,总共处理了500个请求。Reading
:nginx 读取到客户端的 Header 信息数。Writing
:nginx 返回给客户端的 Header 信息数。Waiting
:开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接
2.2 [核心]nginx防刷模块 limit
|
|
- limit_req_zone size 配置说明:设置10M 就可以存储 16 万的 IP 统计信息,这可是非常吊了,可小站的话可以设置陈1m这样,即1s内只处理16k的请求,多的就返回503错误。
- limit_req_zone rate配置说明:普通浏览器的同时并发数量,按照 Dropbox 技术博客里所谈到的,目前主流浏览器限制 AJAX 对同一个子域名的并发连接数是6个。IE 6,IE 7 是两个。
rate=10r/m 的意思是每个地址每分钟只能请求10次,也就是说根据令牌桶原理burst=1 一共有1块令牌,并且每分钟只新增10块令牌,
1块令牌发完后多出来的那些请求就会返回503
加上 nodelay之后超过 burst大小的请求就会直接返回503
如果没有该字段会造成大量的tcp连接请求等待。
参考资料
http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
2.3 nginx日志分析刷量IP
每小时记录一次独立IP的访问次数到文件里:
|
|
再写python监控报警:
|
|
2.4 切割nginx日志
|
|
|
|
三、linux配置
3.1 linux下使用命令统计服务器并发数
|
|
显示结果:
TIME_WAIT 17
ESTABLISHED 3254
LAST_ACK 236
FIN_WAIT_1 648
FIN_WAIT_2 581
CLOSING 7
CLOSE_WAIT 4916
解析:
- CLOSED //无连接是活动的或正在进行
- LISTEN //服务器在等待进入呼叫
- SYN_RECV //一个连接请求已经到达,等待确认
- SYN_SENT //应用已经开始,打开一个连接
- ESTABLISHED //正常数据传输状态/当前并发连接数
- FIN_WAIT1 //应用说它已经完成
- FIN_WAIT2 //另一边已同意释放
- ITMED_WAIT //等待所有分组死掉
- CLOSING //两边同时尝试关闭
- TIME_WAIT //另一边已初始化一个释放
- LAST_ACK //等待所有分组死掉