怎么使用Nginx防御CC攻击
怎么使用Nginx防御CC攻击
CC攻击针对的是服务器上面的内存和CPU资源,因此通常会找到一些比较高消耗的接口,例如search.php之类的需要大量sql查询的接口,下面是学习啦小编整理的一些关于怎么使用Nginx防御CC攻击的相关资料,供你参考。
什么是nginx?
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。
Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
使用Nginx防御CC攻击的方法:
我们主要用到的是Nginx中提供的两个limit模块:
ngx_http_limit_conn_module
ngx_http_limit_req_module
一、白名单
首先这两个模块是支持白名单的,就是可能有某些IP地址,我们是不需要进行限制的,比如可能会是搜索引擎啦什么的或者自己的IP,因此需要设置一个白名单,不需要的可跳过本步。具体方法:
在HTTP段中插入如下格式内容,声明白名单IP
http{
.......
geo $limited{
default 1;
#公司
119.123.5.0/24 0;
}
.........
}
geo指令定义了一个白名单$limited变量,默认值为1,如果客户端IP在上面的范围内,$limited的值为0。
然后紧跟在上面内容后使用map指令映射搜索引擎客户端的ip为空串,如果不是白名单IP就显示本身真实的IP,这样搜索引擎iIP就不能存到limit模块的内存session中,所以不会限制白名单的IP访问。
map $limited $limit {
1 $binary_remote_addr;
0 "";
}
二、访问频率限制
访问频率限制使用到的是ngx_http_limit_req_module,需要在两个地方配置,首先在HTTP段中,声明好这个模块一些参数,如果有设置白名单,设置如下
http{
...
limit_req_zone $limit zone=one:10m rate=20r/m; ##平均20r/m 每分钟20个请求
...
}
如果没有配置白名单,所有来访IP都会限制,配置如下
http{
...
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/m; ##平均20r/m 每分钟20个请求
...
}
解释一下上面的参数,第一个代表的是需要限制的ip群,这个很好理解,第二个zone=one表示这个limit_zone的名字叫做one,后面的使用中可以用这个one来进行指代,后面的15m,代表为这个zone分配10m的内存,1m可以保存16000的$binary_remote_addr。最后一个是频率,如果要按秒来算可以设置20r/s这样。
最后是配置到Nginx的php的解析段
location ~ \.php$ {
...
limit_req zone=one burst=5 nodelay;
...
}
指定了使用名字为one的zone,然后缓冲队列为5,无延迟,如果不设置无延迟,访问会卡住。
三、访问连接限制
访问连接限制使用到的是ngx_http_limit_conn_module,也是需要在两个地方配置,首先在HTTP段中,声明好这个模块一些参数,如果有设置白名单,设置如下
http{
...
limit_conn_zone $limit zone=addr:10m;
...
}
如果没有配置白名单,所有来访IP都会限制,配置如下
view sourceprint?http{
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
...
}
参数的意思跟上面的差不多也就不多解释了。
后面的就是在server段中进行设置了,可以具体到某个目录什么的了
server {
location /download/ {
limit_conn addr 5;
}
大功告成,打完收工,记得要nginx -s reload
看过文章“怎么使用Nginx防御CC攻击”的人还看了:
3.怎么防网站攻击
5.vps如何防攻击
6.服务器怎么防攻击