Nginx和PHP网站防CC攻击解决方案步骤举例

昨天接到客户服务器告警,看到一个nginx+php网站正在遭受CC攻击,导致服务器复制居高不下,正常业务访问大多数时候出现502错误。

CC攻击是 DDOS(分布式拒绝服务) 的一种,DDoS是针对IP的攻击,而CC攻击的是网页。CC攻击来的IP都是真实的,分散的。数据包都是正常的数据包,攻击的请求全都是有效的请求,无法拒绝的请求。服务器可以连接,但是网页就是访问不了,也见不到特别大的异常流量,但是持续时间长,仍能造成服务器无法进行正常连接,危害更大。

查看服务器日志,大量IP访问网站,导致负载居高不下。user-agent也伪装成正常浏览器或者搜索引擎,不能直接通过agent屏蔽。

一、增加nginx防CC限制

在nginx.conf配置的http模块中增加类似如下代码

limit_req_zone $http_x_forwarded_for zone=one:10m rate=3r/s;
limit_conn_zone $http_x_forwarded_for zone=addr:10m;

因为网站使用了cdn,所以限制的时候使用$http_x_forwarded_for参数来获取真实IP。

然后在网站的server模块中添加

limit_req zone=one burst=5 nodelay;
limit_conn addr 3;
经验分享 程序员 微信小程序 职场和发展