许多站长博主常使用七牛进行动静分离,其中的核心功能是对象存储,同时为了加速分发,七牛将静态资源缓存在各地的CDN服务器上,这个功能叫做融合CDN。
如果设置不当,七牛会将整个站点镜像到它的缓存服务器上,内容几乎和源站一样,被一些搜索引擎认为是镜像站,导致源站被降权。眼哥做其他站时就遇到过,static.domain.com 竟然上了百度首页,而源站连影子都没见到。?
七牛默认方案
七牛意识到这个问题,默认会在对象存储空间里生成一个 robots.txt 文件,用来阻止搜索引擎的蜘蛛。文件内容如下:
User-agent: Baiduspider Disallow: / User-agent: Sosospider Disallow: / User-agent: sogou spider Disallow: / User-agent: YodaoBot Disallow: / User-agent: Googlebot Disallow: / User-agent: Bingbot Disallow: / User-agent: Slurp Disallow: / User-agent: MSNBot Disallow: / User-agent: googlebot-image Disallow: / User-agent: googlebot-mobile Disallow: / User-agent: yahoo-blogs/v3.9 Disallow: / User-agent: psbot Disallow: / User-agent: * Disallow: /
不过 robots.txt 只是一个约定俗成的习惯,对搜索引擎没有强制力,防君子不防小人。上文说到镜像存储被百度收录,用的就是七牛的默认 robots.txt。
网友的智慧
因为以上原因,一些站长想出了其他解决方案:
- 将镜像源设置为存放静态资源的子目录,譬如:https://www.idcbuy.com/uploads ,如果网站的静态文件都集中在一个文件夹,这个方法是可行的,但如果比较分散的话就无法做到全站的动静分离。
- 新建一个二级域名,例如 cdn.idcbuy.net ,将静态文件都放在这个域名下,再把这个域名镜像到七牛。很敬佩能想出这个方法的大神,但是大神就这么简单地一说,也没有提供实操方法,让人很难琢磨出怎么“ 将静态文件都放在这个域名下 ”。
以上方法要么有缺陷,要么操作复杂,需要一个更简单好用的解决方案。
眼哥的猜想
因为要解决搜索引擎收录问题,所以首先从搜索引擎的原理考虑。我们可以把搜索引擎看做大型的爬虫项目,网页信息之所以保存在搜索引擎的数据库中,是因为它们的爬虫光顾过我们的网站。前面说过,robots.txt 防君子不防小人,搜索引擎的爬虫可以选择遵守它,也可以选择无视它,只要文件能够访问就可能被采集。
那么,假设不让搜索引擎访问呢?或者说,只给搜索引擎有限的访问呢?
搜索引擎之所以收录 static.idcbuy.com 这样的镜像站,是因为它认为这是一个完整的网站。事实上镜像缓存确实跟源站几乎一样,同样有首页、内页和静态资源。一个完整的网站具有独立性,也就是说脱离了源站也能照常运行。知道这样的原理,我们就有操作空间了——让镜像缓存脱离源站就无法访问。
使用防盗链功能可以实现这个需求。
设置防盗链
作为对象存储和镜像缓存,虽然七牛赠送了一定的免费额度,但是如果被滥用的话可能给站长带来巨大的经济损失。例如图片、视频被人盗链直接引用到其他网站上,受益的是其他网站,损失的是七牛账号所有者。为此使用七牛一定要设置好防盗链。
登录七牛账号之后进入 融合CDN 页面,点击 域名管理 ,点击右侧的 配置 ,在 访问控制 区域进行设置。
将防盗链打开,切换到白名单模式,添加源站域名。最后一定要将空 Referer 访问关闭,这是杜绝搜索引擎直接访问镜像缓存的关键。
设置过后就只能从源站访问镜像的资源,搜索引擎无法单独访问 www.idcbuy.net ,而源站只会加载镜像缓存中的静态资源,不访问类似首页这样的文件。所以搜索引擎的爬虫从源站爬呀爬,顶多爬到源站需要的静态资源上,而不是缓存的页面上,对搜索引擎来说,这个只包含了图片、视频、css/js 的“镜像站”是不存在的。
其实只需要多想一想,换个思路,问题很可能就迎刃而解。七牛的出现让普通站长也能轻松用上了CDN,从此拯救了无数小水管主机,有兴趣的话可以注册一个,会让你吃到甜头的:七牛云存储入口
七牛近期上线了云主机业务,目前正在进行 0 元免费试用活动,有兴趣的话 请戳这里 。