Hexo博客百度搜索结果访问全部返回403的原因

起因

昨天在维护博客,通过 site:blog.richex.cn 查看搜索引擎收录情况时,发现点击很多链接点击打开后返回的是403状态码,但是手动刷新页面之后又显示正常了。

这篇博文 中有说到,博客是纯静态使用腾讯云COS+CDN部署的,返回403意思是权限不足,但我的存储桶设置的是公开读,不应该出现这种情况。

解决方案

起初还以为可能是CDN可能有缓存或者延迟的原因,但这个情况一直存在,于是打开 Chrome DevTools 并在 Network 选项卡打开 Preserve log,之后复制百度搜索结果链接并在地址栏直接打开,查看了一下请求,发现 Referrer 地址是百度搜索结果页面的链接地址,而我的CDN开启了防盗链功能,所以出现这个问题的原因也就显而易见了,解决方法有以下两种:

  1. *.baidu.com 添加到防盗链白名单中。
  2. 将特定的资源例如图片、视频、文件等进行防盗链,针对html不开启防盗链功能。
  3. 关闭防盗链功能。

如果采用第1种方案,那么不止是百度,还需要将市面上各种搜索引擎全部添加上白名单。而且仍然无法保证不漏掉一些规模较小的搜索引擎,或者是其他任何网站页面上的链接直接引用。

而第2种方案看上去挺不错,可是CDN并不支持这种功能。

所以最终我选择了第3种,全站关闭防盗链功能,在等待片刻CDN部署完成后,问题也得到了解决。虽然不开启防盗链可能会导致资源被盗用产生CDN流量费用,不过可以通过流量、带宽封顶限制功能进行限制,同时根据日志找到非正常的IP或者Referrer进行拉黑也可以解决。

Tips

  • 流量或带宽封顶限制、IP或Referrer防盗链黑名单等功能的支持情况视CDN服务商不同而不同。例如流腾讯云就不支持流量封顶或者报警的功能,只有一个 带框封顶限制 功能限制(截至2019-06-13)