网站除CDN外,另一种防DDOS的手段

起初是用封IP来解决被DDOS,但这也属于治标不治本,攻击者手中可不止一台机器。出了使用CDN这个手段,其实还可以通过PHP应用层做限制。(毕竟CDN是需要钱的)流量一大烧的就是钱。

下面我收集的几种防DDOS的方法,记录供大家参考。

一、Nginx层限制

做法:设置nginx配置,利用nginx的桶漏算法对IP访问限制(下方有漏桶算法的解释)

优点:简单设置基本不需要任何成本、稳定、而且不占用php-fpm进程资源

缺点:只能按照nginx方式去做限制访问

二、在PHP应用层做限制

做法:设置nginx配置,利用nginx的桶漏算法对IP访问限制

有点:简单设置基本不需要任何成本、稳定、而且不占用php-fpm进程资源

缺点:只能按照nginx方式去做限制访问

三、接入CDN

最简单有效的方法,但是需要付费。通常大流量DDOS攻击都会采用CDN来抗下。

注意:国内CDN防护,没有备案无法使用


以上三个防护措施,我选择了Nginx层限制

配置方法:

#定义一个桶漏
limit_req_zone $binary_remote_addr zone=one:1m rate=1r/s;
server {
        location ~ \.php$ {
                        limit_req zone=one burst=3 nodelay;# 使用one桶漏

                        fastcgi_pass   127.0.0.1:9001;
                        fastcgi_index  index.php;
                        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                        include        fastcgi_params;
        }

配置说明:

配置使用limit_req_zone定义了一个桶漏

$binary_remote_addr  是根据访问IP生成的桶漏,zone=one 定义了桶漏的名称为one, 1m表示定义这个桶漏为1mb内存空间存放访问信息,rate=1r/s 是每个ip每秒处理1次并发数,这些都可以根据自己任意更改。

因为很多爬虫过多访问耗尽了我的 php-fpm 进程,所以我只对访问php文件做了限制limit_req zone=one burst=3 nodelay;

这里是使用上面定义的one桶漏,桶的容量是3,也就是说每个桶每秒处理一个请求,如果单个IP并发超过1个的话其它的会缓存在桶内,但是桶的容量只有,如果并发是3,处理1个请求两个会被缓存等待处理(这里用nodelay回被同时处理),如果并发超过3个水桶的水会溢出,访问直接503拒绝访问

漏桶算法图解

网站除CDN外,另一种防DDOS的手段
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
广告位招租919838898
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索