前言
目前很多网站压力测试工具本质上都可以用来进行攻击网站,如果网站没有做任何防御,就会轻易因一条命令发起的攻击而导致服务器不能正常工作(比如三丰一开始就没考虑到这个问题,直到一次用ab测试网站时,直接导致我的服务器资源耗尽而无法正常访问),这是对站长非常不利的。因此,我们有必要利用nginx对这些简单的攻击进行一定的防御。
防御核心配置
直接将下方代码复制写入nginx主配置文件的http模块,然后重启nginx即可:
# 预防cc攻击
limit_req_zone $binary_remote_addr zone=peripreq:10m rate=10r/s;
limit_req zone=peripreq burst=5 nodelay;
# 限制用户连接数来预防DOS攻击
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 限制同一客户端ip最大并发连接数
limit_conn perip 5;
# 限制同一server最大并发连接数
limit_conn perserver 20;
# 限制下载速度,根据自身服务器带宽配置
limit_rate 2000k;
以上配置中第2行的zone=peripreq指分配的区域名称为peripreq,你也可以自己命名其他更多的区域实现更多的限制级别,后面的几行中的zone也同理。rate=10r/s,表示每秒最多10个请求,这个值理论上越小越好,但要保证网站能够正常访问,可根据访问情况适当修改这个值。最后的限制下载速度也建议根据服务器带宽设置一下。