利用 CDN 解决百度爬虫被 Github 拒绝的问题

百度爬虫被 Github 拒绝

前两天在知乎看到一个问题:如何解决百度爬虫无法爬取搭建在Github上的个人博客的问题?

我一看,这不是和我的情况一模一样吗?

我赶紧上去看了看我网站的统计信息:

baidu search

是的,从4月份开始,百度来源跌停了…

这位博主联系了 Github 的支持部门(传送门),对方的答复是百度爬虫爬得太猛烈,所以就禁掉了。

但是从我平时的统计信息来看,Google 的爬虫效率高,也更勤快,怎么不把 Google 禁掉了?

其实那段时间还发生了这样一件事情:百度统计js被劫持用来DDOS Github

虽然不知道有没有关系,但我猜还是有一点的。

 

解决思路

既然 Github 彻底和百度决裂了,那我们也只能自己动手来解决了。Github 可能是封了百度的 IP,也有可能是封了百度爬虫的User-Agent

所以要解决这个问题,最好就不要让百度爬虫直接访问 Github 了,需要在中间套一层反向代理

那么问题又来了,既然我可以搭一个反向代理服务器了,那我为什么不直接把博客放在这台服务器上?放 Github Pages 上不就是为了少一台服务器,少一点费用吗?

那有没有免费的第三方反向代理服务呢?当然有,其实现在各种CDN服务不就是吗?而且还额外提供了各种网络环境下的加速功能。

但是使用 CDN 也会有一个非常大的缺点:只能对静态资源做,因为 CDN 和反向代理有一个很大的不同就是:它会做缓存,并向各个节点分发。

所以 CDN 一般都是用来给静态资源做加速的。如果你对动态页面做加速,用户看到的页面在一段时间内就一直不会变了。但是我们不怕!因为 Github Pages 本来就是全静态的!

最近我尝试了如下几种方案:

  • 加速乐
  • 七牛云存储
  • 又拍云

最后我选择了又拍云,因为前两者都不能满足我的需求,下面就给大家介绍一下它们的不同,和它们的问题。

 

加速乐

加速乐其实是一个 DNS 解析服务商。你需要把自己域名的 NS 地址改成它的,才能使用加速功能。除了加速,还有很多额外的防黑功能。

jiasule

但加速乐的问题是,它并不是纯粹的 CDN 服务商,它的加速和 CDN 还是有很大区别的。

首先加速乐会去判断内容是不是该被加速(例如后缀是不是 js,css,html 等静态资源)。我的博客设置的域名都是没有后缀的,例如:/2015/06/github-pages-and-cdn/,不一定会被加速。

然后加速乐也不是百分百加速,它可能会根据各种情况去判断是否要加速。

用了几天后发现,百度爬虫还是 100% 被拒绝。

 

七牛云存储

七牛做得很不错,它有一个镜像存储功能

jiasule

我把我网站的 CNAME 写成了我七牛云存储空间的地址,然后配置了一下镜像。

这样当我访问www.dozer.cc/index.html的时候,会请求到七牛的服务器。七牛会自动帮我访问dozer47528.github.io/index.html的内容,帮我缓存,并返回给我。

用了几天后,发现百度爬虫完全正常了!因为此时,百度爬虫访问的其实全都是七牛的资源。

jiasule

但是过了几天,我又发现了一个问题!我的博客更新后七牛根本不会更新它缓存的内容。

后来仔细看了一下文档才发现,七牛提供的镜像存储只是给你当迁移工具用的。人家没说会自动刷新缓存。

既然这样,又只能放弃了。

 

又拍云

最后一站是又拍云,对又拍的印象其实不是很好。以前用又拍存照片,后来我想迁移,官方不仅没有迁移工具,而且网站还没一键清空功能,实在是恼火。当然这是5年前的事情了,近几年又拍在云服务这块发展的还是很不错的。

又拍同样有和七牛一样的功能,但是人家的名字就不一样,叫做:CDN 回源配置

jiasule

而且人家上面有设置缓存时间的功能,上面明确写了:CDN 缓存时间是指 UPYUN 回源取得文件后,文件在 UPYUN CDN 网络中的缓存的时间,超过缓存时间则重新回源获取文件。

是的,这才是真正满足我需求的功能!

仔细用了一下,发现又拍各方面还是都比七牛做的到位一点。

恩,刚配置完,看看效果,如果效果满意就不更新本文了,到此结束。如果还有问题,那必然会有后续的解决方案。

 

关于价格

上述三家各有特色,如果是个人博客这样的网站,流量不会很大,它们都有免费套餐,完全够用。

大家可以根据自己的需求选择不同的服务商。

 

为什么不用国外的 CDN

原因其实很简单:速度慢、易被墙。

大家经常会发现,很多国外的网站都是可以打开,但是页面时乱七八糟的。

原因就是那个网站用了 CDN 服务,而这家 CDN 服务商被墙了。

CDN 是防火墙重灾地,所以如果你的博客是面向国内用户,那么用国外的 CDN 是一个不太明智的选择。

发表评论

Close Menu