CC攻击本身是正常的请求,它通过模拟用户对目标网站的页面进行大量访问,从而增加服务器的负载,消耗其CPU资源,致使服务器因负载过大而无法正常工作,导致访问异常。致使搜索引擎的爬虫无法爬取网页内容,网站关键词排名就会渐渐下降,如果一段时间之后还是无法访问,搜索引擎就会将其判断为网站关闭,从而kill掉网站的收录。
短时间的危害主要就是用户无法访问导致用户流失,网站体验度下降。
主要通过nginx的http_limit_conn和http_limit_req模块来防御cc攻击。
ngx_http_limit_req_module可以限制单个IP每秒请求数
ngx_http_limit_conn_module可以限制单个IP的连接数
1、限制单个IP请求数
食用方法:在Nginx的配置文件里http“{” “}”里面放入以下代码
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
limit_req zone=one burst=2 nodelay;
说明:
$binary_remote_addr:表示客户端IP地址
zone=one:10m:漏桶名字为“one” ,并为这个zone分配10M内存用来存储会话(二进制远程地址),1M的内存可以保存约16000个64字节的记录(可以参考官方文档)
rate=5r/s:限制每秒5个请求的频率
burst=2:允许超过频率限制请求,但是最多不能超过2个
举例一:第一秒请求1个,第二秒也请求1个,那么第三秒是可以请求5个的。
举例二:第一秒请求4个,第二秒超过2个请求直接503。
nodelay:超过的请求不延迟处理,设置后4个请求在一秒内处理。
2限制每个IP的连接数:
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 5;
说明:limit_conn addr 5;限制同一时间内只允许5个连接,超出的返回503