DDoS 你好,DDoS 再见

前些日子佐仔的博客下线了,几天之后重新上线。过去一看,原因是主机遭受了 DDoS 攻击,随后被 ICDSoft 逐出了家门。无独有偶,坛子兄也遭受到了类似的攻击,也被 ICDSoft 列入了黑名单。

香港的主机容易受到攻击,这是不争的事实。因为香港离大陆很近,网络连接速度快,开设博客又不需要备案,于是就成了很多博客主的首选。当然博客的质量参差不齐,香港目前还相对自由,内容不受限制,以至于一些不法分子趁虚而入,发表一些反动言论,从而遭到攻击。当然我不是说上述的两位博主反动,他们只是被误伤了。虚拟主机的一台机器上好多个站点,一个站点受攻击,其它站点连带着遭殃也是正常的事。只是 ICDSoft 的做法有点让人不爽。

被 DDoS 攻击是很常见的事,前一阵子 GitHub 也被攻击过,怎么就不见 GitHub 把受攻击的 Repo 扫地出门?GitHub 当时的做法是依靠自身的硬件和运维,硬抗下了两周时间的 DDoS,最终使得攻击方自行终止,放弃攻击。

相比之下,ICDSoft 的做法很 Low。技术水平达不到,就不要出来做主机商;被攻击了不先反省自身问题,直接把责任推卸到博客主头上。不仅技术不行,道德也成问题。

写到这里,不禁想到一个段子。曾经 Google 受到过几百 G 的流量攻击,结果一点影响都没有,流量还没有直播女王登基60周年庆典的大。这个段子的真实性有待考据,不过它从一定程度上反应了 Google 网络的强壮程度。

所以呢,空间商要选高质量的,就算抗不住 DDoS,也不能随意乱踢人。当然,如果能抗得住攻击,那就更好了。另外也对玩 DDoS 的菜鸟们说一声,不要去欺负弱小的服务商了,想提升自己的水平呢,还是要找一些牛 X 的目标

在 Google Cloud 架设博客的费用

说说目前博客的费用,给想用 Google Cloud 的同学们一个参考。

Google Cloud 的计费方式和 AWS 有点不太一样,AWS 想要便宜,需要事先买一个套餐,套餐价比常规价格便宜,但必须用上个一年或三年,如果一年内终止使用,套餐的费用是不退的。之前发生过买了三年的套餐,结果 AWS 推出新机型并且降价了,导致老的套餐性能又差又不合算的局面。

而 Google Cloud 则没有这个限制,它只需要你使用一种机型达到一个月,即可以享受优惠价格,比 AWS 要灵活很多。刚搬过来的时候,进行过几次调整,导致没有用满完整的自然月,于是一直没法发这个统计,总算现在有完整一个月的纪录了。

总共使用 45.06 美元,包括三台主机,博客放在亚洲的主机,兼当 DNS 服务器,另外还有两台从属 DNS,分别在欧洲和美国地区。目前这样的配置应该超过90% 的博客了,所以新建博客的费用只会比这个少。

以下是明细,单位为美元,已减掉用满一个月带来的优惠:

  • 博客主机,总计 28.99
    • A(Small / 亚洲):17.29
    • B(Micro / 欧洲):6.11
    • C(Micro / 美国):5.59
  • 流量,总计(58.9 GB) 12.19
    • 中国地区(46 GB):10.63
    • 亚洲其它地区(5.5 GB):0.68
    • 欧洲地区(2.4 GB):0.28
    • 美国地区(5 GB):0.6
  • 硬盘,总计(30 GB)3.85
  • Google Cloud Storage,863 GB * 小时,0.03

需要指出的是,Small 主机的配置是 1.7G 内存,外加我用了 10G 的硬盘,这样的配置比大多数 VPS 是要好的,比如 Linode 和 Digital Ocean 上 2G 内存的 VPS 都要 20 美元一个月。

而这个月 Google Cloud 又进行了一次降价,降完之后应该属于超合算的云主机了。

投靠 Ubuntu

经过一番纠结之后,我还是把博客换到了 Ubuntu 之上。

之前提到过,从 AWS 转到 GCE 的时候,被迫选择了 RHEL 7(Redhat Enterprise Linux),因为只是 RHEL 7 是完全兼容 AmazonLinux 的。虽然 RHEL 需要另外付费,但为了平滑过渡,我还是以谨慎为先。

RHEL 有非常完善的商业支持,文档很齐全,有什么问题一查就可以明白。唯一的问题是,它的收费太高了,GCE 上面用一个月需要 50 刀以上,且不像主机一样用的时间长会打折,这样算下来,年费和一个 Radhat 的订阅差不多价格。但是我并不需要什么客户支持,技术问题都可以靠 Stackoverflow 搞定,这个订阅费用就白白浪费了。这也是我转向 Ubuntu 的主要原因。

还有一个原因是 HHVM。HHVM 是 Facebook 的 PHP 引擎实现,完全兼容 PHP 5.5 (及以上)。WordPress 从 3.9 开始,完整兼容 HHVM。

HHVM 的响应时间,据说是 PHP-FPM 的一半,也就是提升了一倍的吞吐量。原生 PHP 要做到这个效果,需要等 PHP 7 发布才行。看着各种发行版对于新软件的保守程度,不知道 PHP 7 要到什么时候才能成为主流。另一方面,Facebook 的研发能力肯定要比 Zend 来得强,等 PHP 7 发布了,HHVM 的性能肯定会更强。于是我就抛弃了原生 PHP,转投 HHVM。

当然,我也可以在 RHEL 上自己编译安装 HHVM。我试过,GCE 的机器编译了一个小时,我都快睡着了才编译完成,但安装(make install)的时候,告诉我某个文件不存在 -_-。我还是老老实实用官方的安装包吧,而 HHVM 官方只提供了 Debian 系列的安装包。

为什么没有选 Debian?Debian 保守到现在还只提供了 Apache 2.2,无语。

那也可以转投 Nginx 呀?我不高兴重写那一堆的 RewriteRule,并且 PageSpeed 在 Nginx 上也需要自己编译安装,不想再重蹈 HHVM 的覆辙。

由于 HHVM 和 PHP-FPM 的用法几乎一模一样,转换过程没出现任何问题,我做的唯一的工作就是重新设置了 Apache。花了几个小时,不过没什么难度,转换过程很顺利。

现在博客已经运行在 Ubuntu 14.04 + Apache 2.4 + HHVM 3.5 + MySQL 5.6 之上,欢迎测试,有问题请留言。

为博客开启站内支付功能

2016.02.15 更新:由于使用量太小,本方式已被关闭。

几年前,阮一峰在自己的博客上做了个实验,让读者看完文章之后,象征性地捐点钱以资鼓励。一年的时间里,他写了 88 篇文章,一共募捐了 5703.13 元人民币,平均一篇文章收入 65 元。读者的付费率不到 0.1%。

对于付费阅读的困难,阮一峰在文章中总结了这么几点:一)手续费高,如果每篇文章收 0.99 元,他还得倒贴钱给支付宝;二)付款流程麻烦,不是所有读者都有支付宝,即使有,就为了几块钱的捐赠走一遍付费流程,似乎不是每个人都愿意的;三)无法和读者互动,读者付了钱和不付钱,看到的内容是一样的。

那个实验是在三年前完成的,这三年里网络支付发展得非常好,在线支付的体验已经今非昔比了。

原先本站就已支持了四种支付方式:微信、支付宝、Paypal 和比特币。这四种方式现在都已支持手机扫码支付,打开手机应用,扫码即可完成支付,不必经历网页版冗长的支付流程。这些支付方式存在已久,大家都熟悉了,不必多言。

而从今天开始,本博客将增加一种全新的捐赠方式:站内信用卡支付,由 Stripe 提供支持。

简单的支付流程如下:

  1. 点击要捐赠的金额,比如¥10;
  2. 在弹出的对话框中填写:邮箱、信用卡号、有效期、CVC码,然后点击“捐赠”;
  3. Stripe 和本站服务器会联合完成剩余的工作。

整个过程中,连网页跳转都没有,非常高效快捷。实际的交易由 Stripe 完成,全程 HTTPS。本站无法获得(或保存)信用卡信息,仅能看到用户的邮箱地址和捐赠金额,作为归档之用。具体的交易流程将在之后的文章中详细介绍。

回到一开始的话题,这样的站内支付,可以解决阮一峰先生的两个问题:付款流程麻烦、无法和读者互动。

站内支付,自然没有复杂的付款流程,只需要一张信用卡即可。在 Visa 和 MasterCard 普及的今天,拥有一张信用卡并不是难事。在支付的过程中,也不必填写账单地址,或是等待短信验证码。整个流程可以在一分钟内完成。

而更重要的是用户体验,由于博客的服务器可以接收到用户的付款信息,也就可以做出相应的反馈。比如可以在用户付款之后,再开放某一部分文章的阅读权限,使得付了钱的用户,可以得到一些回报。当然本站并没有这样做的打算,目前还是以捐赠为主。

总而言之,科技在前进,前几年做不到的事情,现在变得简单,而逐渐没落的博客圈了,可能会因为多种多样的收款流程,而日益蓬勃起来。

评论时自动填写身份信息

在别人的博客里留言,总少不了填写一些个信息,昵称、邮箱什么的。如果对方的博客中启用了集成式的评论,比如“多说”,那还登录一下就好了;但如果是最基本的评论功能(比如本站),还是要填这些信息的。虽说这些信息很少,打打字也不花多少时间,但如果有工具能帮我们填,岂不更好?

Chrome 的收藏夹有一个功能,它不仅可以记录一个网页地址,还可以执行一段 Javascript。这段 Javascript 需要以“Javascript:”开头,且只能有一行。大致样式如下图。当你点击这个收藏项的时候,Chrome 就会对当前页面执行这段 Javascript。于是我们要做的就是,写一段 Javascript 代码,在当前页面找写评论的地方,填上个人信息即可。

以下代码受博客评论个人信息自动填写代码一文启发,略加修改而成。它会依次搜索支持的博客类型,如果找到,就自动填写昵称、邮箱和网址。目前支持的博客有:Wordpress、Typecho、z-blog、Emlog。在手机和平板上同样可用。

把以上代码添加进你的收藏夹,填写好昵称、邮箱和网址之后,点击“生成链接”,然后把生成出来的链接拖曳进收藏夹:

>>>填写博客留言<<<

在新浪博客中以任意时间发表新的博文

小R的要求,捣鼓了一下新浪博客。

新浪博客貌似禁止修改博文的发表时间,只能定时在未来的某个时间发布,而不能用以前的时间发布。原因可能是为了防止某些人修改时间来作弊。出发点虽好,但也阻止了大家迁移博客的需求。

不过上有政策,下就有对策。绕过新浪的限制是可行的,如下:

1. 发表新的博文,然后设置定时到随便一个时间。

2. 在“博文将于XXX时间发布”的框上面点右键,选择“审查元素”(Chrome的功能,IE可以通过F12做到类似的效果)

3. 在弹出的窗口中找到“date_pub”字段,把value修改成想要的日期

4. 按你的需求设置博文的其它内容,然后发表即可。

然后新的博文就是以你想要的时间发布啦……

不过貌似已发布的博文,没有办法修改时间,只能用相同内容发表一篇新的,同时设置新的时间……