关于本站备案那点事

1599次阅读  |  发布于5年以前

算了算我写博客快有十年了吧。一开始是在 csdn 写;大约九年前,我开始使用自己编写的博客程序并启用独立域名,变成独立博主了。这些年来,我的博客程序从 ASP 到 Python 到现在的 NodeJS 写了三版,域名从 qgy18.com 换到 imququ.com,部署环境也从一开始的国内 ASP 空间到后来的 Linode,唯一没变化的是我的博客从来没有备案过。

但是最近,我的 Linode Tokyo 持续无法访问,几番折腾之后终于下定决心使用国内云主机。既然无法改变现状,何不试试现在流行的「拥抱变化」呢。选择国内 主机,根据国家有关规定,我就必须去完成备案。

国内主机我选择了阿里云的 ECS,顺手就用了阿里云备案系统。总的来说整个过程还是很顺利的:2015-08-18 晚上提交初审,2015-08-19 提交管局审核,2015-09-02 收到通知备案成功。大约两周的时间,对于备案地在阅兵前的北京来说已经很不容易了。这里要感谢波波同学提供的幕布,省去了消耗在 拍照环节的大量时间。另外我也比较幸运,我提交申请的时候还不需要邮寄资料,又节省了一些时间。

下面说说备案期间我对本站的一些处理。

首先,由于我的 Linode IP 已经无法访问,所以我购买 ECS 之后直接就把 DNS 解析过来了。这时我发现阿里针对未备案的域名进行了阻断,通过 HTTP 协议访问我的博客,会看到阿里云默认的「温馨提示」,请求根本不会到达 ECS。但是通过 HTTPS 访问就没问题了,这是 TLS 传输加密的功劳。由于我在两年前就启用了 HTTPS,并且输出了 HSTS 响应头,阿里这个阻断策略对我来说影响不大。

这里顺便说一句,很多人都会抱怨 HTTPS 慢,实际上这是因为有太多站点没有好好优化。合理地优化外加新协议(HTTP/2)的使用,HTTPS 并不见得就会慢。大家访问我的博客会觉得慢吗?

但是,根据经验为了保证备案通过率,最好进行关站处理。我经常要在自己的博客上查东西,当然不打算彻底关站。暂时去掉 DNS 解析,改在本地配 HOST 是一种方案。但是我采用的是另外一种方案,针对不同情况区别对待:

A)老用户白名单。我的博客为了做统计,会记一个有效期很长的 cookie,我在程序中判断如果存在这个 cookie 一律放行。备案审核人员之前肯定没有来过我的博客,这一点大可放心。

B)操作系统白名单。根据之前的统计,我的博客大约有接近一半的非 Windows 用户,我假设审核人员都是用的 Windows 电脑办公,于是针对 UA 中不包含 windows 的请求直接放行。当然,你也可以假设他们只用 IE,但是我没冒这个险。

C)蜘蛛程序白名单。大部分蜘蛛程序都会在 UA 中表明身份,针对这类请求需要放行。这一点很重要,不然搜索引擎会认为你的网站无法访问而影响收录。我针对 UA 中包含国内外各大搜索引擎 Spider 和 RSS 阅读器 Spider 的情况一律放行。

D)来源白名单。由于我不能确定审核人员一定是直接访问待审核网站,我并没有针对请求头中存在 Referer 字段的访问直接放行,而是针对其中的两类情况做了白名单:1)从搜索引擎过来的请求;2)从 Google Analytics 统计到的外链站点过来的请求。

E)URL 参数白名单。有时候我需要发一篇博文给别人,为了保证他一定能打开,我会带上特殊的参数,再在程序里针对包含这个参数的请求一律放行。

至于 IP 黑白名单之内的策略,我觉得收集规则太麻烦就没去弄。除了上面这些情况,我会输出 404 Not Found,真的相当于关站了。根据这段时间的统计,加上这些限制后,每天的访问量大概少了 1/4。

上面这些逻辑我是通过 ThinkJS 的 behavior 实现的,代码不过十几行,并且可以方便地开启和关闭。ThinkJS 是一个非常好用的 Node.js MVC 框架,有兴趣的同学可以去官网了解下。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8