上个月我就说了我网站CDN被PCDN刷流量了,这快一个月了,还在继续,当然我已经没搭理了,本来今天准备录制视频教程,说下我是怎么应对的,但是外面的蝉一直叫唤,还好多,哎,服了,那就还是写文字来说明吧。

应对方案是一直就有的,我使用CDN之后,本来就一直是这样做的,只不过是这两天因为测试了腾讯云的EdgeOne服务,所以整理了一下发出来。

使用CDN之前,你先想一下,你真的需要CDN服务吗?

如果要使用CDN服务,那么在对接CDN的时候,一定要先了解清楚你使用CDN服务运营商的各种规定文档,看清楚说明,避免一夜回到解放前。

比如我使用的腾讯云CDN,他家的HTPS请求数,每个月有300万的免费额度,我的网站流量很少很少,正常来说300万的请求是完全够用的,但是如果遇到被刷流量,那这个可能就不够用了。

然后就是CDN流量,是没有免费额度的,所以在对接CDN之前,一定要先购买流量包,这个非常重要!

所以在使用CDN的前提:

1、购买CDN流量包

2、购买HTTPS请求包(除非你不用https)

 

我以这个博客网站所用的腾讯云CDN为例来讲下我的CDN配置。

一、访问控制

1、流量防盗刷配置(仅限中国大陆)  –  启用

防护文件,看你自己的需求,我的设置:jpg.png.js.css

2、防盗链配置  –  按需启用(如果是主网页就不要开启,如果是调用静态文件的域名就开启)

3、IP访问限频配置  – 启用

因为我这个博客没有流量,没啥用户,也没几个文件要加载,所以我设置的是 100 QPS,这个也是根据你自己的网站情况来设置的。

4、UA黑白名单配置

把常见的爬虫UA给加上,用处不能说有用也不能说没用,总之以防万一。
curl*|*crawler*|*python-requests*|*scrapy*|*go-http-client*|*wget*|*axios*|*HttpClient*|*CriOS*|*FxiOS*

这个规则是我在问了腾讯云官方客服和AI分析的结果下,综合了几个常见的爬虫UA标识。

当然也可能会误封啊。

二、高级配置  

用量封顶配置

瞬间用量  –  流量 – 500MB – 5分钟

瞬间用量 – HTTPS请求数  – 1百万次 每5分钟

我都是用的瞬间用量限制。

三、告警配置

告警配置,就是让腾讯云可以及时通知我们,CDN是否异常的情况。

在腾讯云可观测平台创建一个关于CDN域名的告警配置,我的配置:

  • 流量 > 500MB,统计粒度1分钟,连续3次满足条件则每1小时告警一次
  • 请求数 > 1000次,统计粒度1分钟,连续3次满足条件则每1小时告警一次
  • 带宽 > 200Mbps,统计粒度1分钟,连续3次满足条件则每1小时告警一次

这个是意思就是,流量异常大于500MB、请求数大于1000次就会通知我,微信、短信、邮件都会通知到。

那我就可以及时去查看具体什么情况,根据具体的异常问题来解决,比如分析数据,封掉对应的ip之类的。

 

四、静态对象存储和CDN配置

这个就是用于存放静态文件的网站CDN配置了。

首先我们需要在对象存储这边做下跨域访问CORS和防盗链设置。

然后再到CDN域名配置这边,进行防盗链配置,和对象存储的防盗链设置同步。

其次到CDN高级配置 – HTTP响应头配置,这个也就是要和对象存储的跨域访问CORS设置同步。

最后按需做CDN鉴权配置,这个配置看情况吧,我暂时没有做,因为我静态CDN的域名很多地方在调用,有点乱。

注:具体的跨域访问CORS和防盗链设置,是根据你自己网站来。

 

五、遇到被刷流量(不限PCDN)之后怎么解决

在我们收到告警通知之后,立马去CDN控制台的数据分析里面,查看具体数据,在展示数据里面,可以都勾选上,但是我们要查看:

  1. 请求数
  2. 错误码
  3. TOP1000 URL
  4. TOP 100 客户端IP

这个后台是看不了具体UA参数的,所以这里看不看UA都无所谓,因为查看具体UA标识是要下载日志才行,这个日志在日志服务里面可以下载,

我们看请求最多的URL链接,在TOP1000 URL里面,看看被请求最多的URL,对应的是什么文件,如果文件是不正常的,或者不需要的,可以先把这个文件给删了,记得刷新缓存。

1、封异常ip

然后再到TOP 100 客户端IP里面查看,请求最多的ip,拿到ip之后,我们到:CDN配置 – 访问控制 – IP黑白名单配置

把异常访问的ip给加到黑名单去,加进黑名单的ip,它可能还会继续访问,但是会变成 514 的错误码,而腾讯云 514 的错误码不计算https的请求数,也就是不会消耗你的https套餐包。当然流量还是会走,但不会是大流量了,就一个正常的访问流量,所以这点流量没什么,我在开头就说了要先买好流量包。

如果遇到的ip太多,那我们就要持续观察,并且记录每一个异常ip,看看这些ip有没有什么共同点,这个很重要,如果是同一个ip段,那我们就可以不用一个个的封ip了,而是直接封掉整个ip段,腾讯云的ip黑名单是支持的,比如:

43.254.192.0/24

那么43.254.192.开头的ip都会被封,如果还有更多同个大的ip段,24子网不够,那么就用16子网的,比如:

43.254.0.0/16

这样的话,只要是43.254.开头的ip都无法正常访问,腾讯云也是支持这个规则的。

使用16子网的误封率肯定比24子网大,这个就看你自己的安排了,你要是时间多,有人专门盯着,那可以一个个的封,要是你觉得不太重要,比如我的博客,所以我就是直接采用的16子网进行封禁。

具体ip数:

  • “/24″是一个较小的地址块(包含256个IP地址)

  • “/16″表示的是一个更大的地址块(包含65536个IP地址)

当然在封禁ip的时候,先去查询ip,免得把你自己本地的ip加进去了,如果你每天自己经常访问自己的网站,那你自己的请求肯定也多。

查询ip地址:https://www.wujiit.com/ipcn

2、封异常UA

我们在后台下载日志之后,分析里面的具体数据,如果异常UA标识很少,都是那么几个,那我们可以针对异常UA进行封禁,如果UA实在是太多了,比如他们合作刷PCDN的,那封UA就没啥意义了,因为可能有上千上万个伪装的各种UA,你没法封的,所以这种情况只封ip就行。

 

以上就是我网站CDN的一些常规配置以及我遇到PCDN的解决方案了。

我博客网站这几天切换到edgeone服务免费版上面去了,虽然刷PCDN流量的还在继续,不过相对又省心一点,关于edgeone的体验和我之前的疑问,等过几天有空了,我核实之后再说。