上周五突然发现我无法访问自己的博客了,但是国内的朋友可以访问。心里一惊:不会被封了吧?!
可是我的博客一向老实本分啊。关键是,我买的是香港主机,IP是新加坡的,境外主机被封的话难道不应该是国内用户访问不了,国外用户可以访问吗?怎么现在反过来了?所以很可能是主机公园——也就是主机供应商方面的原因,大概线路故障什么的。更何况经过试验,即便从国内访问也无法登陆主机的cPanel管理界面,因此服务商方面故障的可能性很大。
我试着把自己的域名解析到别的网站IP,结果是我的域名可以正常指向别人的网站。因此看来域名没有问题,是IP已经不可用了。
联系主机公园几天都没收到回复,遂决定换主机服务商,搬家。
因为我用的是共享主机,所以如果网站真的被封的话,一个可能原因是这台主机上有其它站点“作恶”,导致这台主机的IP被封,于是主机上的所有站点都无法访问。借此机会我也了解到了共享虚拟主机(Shared Hosting)和独享虚拟主机(Virtual Private Server,一般简称为VPS)的概念。
共享虚拟主机是多个站点共享一个IP,用户无法通过ssh登录主机,只能通过主机服务商装好的cPanel等图形界面工具来管理站点,可定制化程度很小。服务商提供的存储和流量也相对较少,但胜在省钱。共享主机上的站点域名解析往往采用CNAME记录类型,即别名解析,也就是用户的站点域名先是解析到主机服务商的域名,然后再由主机服务商提供具体的IP地址,这样主机服务商变更IP地址后就不用挨个通知各个站点的站长去修改自己的域名解析记录。
独享虚拟主机(VPS)相当于用户拥有了整台虚拟主机,也就有了独享的公网IP地址。用户拥有主机的root账户,可以通过ssh登录,随便捣腾主机的操作系统和应用软件。不过相应地价格也就比较贵。用户为了搭建一个网站也要做更多的工作,因为一台崭新的独享主机上往往只装好了操作系统,像数据库、Web服务器、PHP和WordPress这些东西都要自己安装配置(当然往往也可以从别的用户已经配置好的主机镜像复制一份)。在拥有独享静态IP的情况下,独享主机的域名解析一般就采用A记录类型,即记录解析,也就是域名和IP地址静态绑定。
我现在用的新主机是在Vultr上买的VPS。价格是每个月5美元,一年算下来要比原来的共享主机贵了一倍。不过有一台自己专用的服务器,可以用ssh随便捣腾,对程序员来说是很爽的。Vultr提供的一些IP地址已经被封了,不过可以迅速创建新主机直到被分配到一个可用的IP,然后将旧主机的快照应用到新主机即可。下一节马上会讲到如何检测IP是否可用。
VPS提供的存储和流量一般比共享主机多,尤其流量会多很多。之前用共享主机时,为了节省站点存储和流量,我将图片都放到了UCloud的免费对象存储上。然后为了能够让WordPress媒体库支持外链图片,我还写了一个External Media without Import插件。现在Vultr给我分配的存储是25GB,流量是1TB,比我之前的共享主机加UCloud对象存储的配额总和还多,且超额流量的收费也比UCloud便宜(当然就我这么个小站肯定不会超1TB)。因此我可以放心地将图片存放在站点服务器上,那个插件也暂时用不上了。
(说句题外话,因为插件已经有一定的用户量了,并且用户也给我提了不少反馈,尤其对批量添加的需求很强烈,所以我还是会继续改进这款插件的。)
言归正传,主机公园当然也提供VPS,但是价格比Vultr贵一些,提供的存储和流量也不如Vultr多。这也就罢了。关键是!从前几天起我就给主机公园提工单,发QQ消息,但直到我写这篇文章时都没收到任何回复!去年用得还好好的,工单回复也挺及时,就这次不知道怎么了。这个月我才刚续了一年的费用啊!后来在知乎上看到别的主机公园用户也遇到了同样的问题,不知道主机公园是不是最近遇到了巨变。
更关键的是!我登录不进cPanel了!这意味着我无法获取站点的完整拷贝。还好目前网站内容还不多,几个月前我本地也有一份数据库拷贝。连上后,依靠WordPress自身后台左侧菜单栏的工具 -> 导出导入功能才实现了站点内容的迁移。尽管如此,也还是折腾了一天。
于是我学到了重要一课:不要完全依赖主机服务商提供的备份功能,一定要定期在自己本地或是别的地方存放一份完整的站点拷贝,不然什么时候服务商一声不吭玩消失了就真是欲哭无泪。WordPress自带的导出导入工具也并不完备,不少内容还是要通过直接操纵数据库来迁移。
给Vultr做个广告吧,有兴趣自己建站搭服务器的读者,推荐点击此链接注册Vultr账号并购买主机服务。Vultr支持支付宝付款。
最土的办法是请国内外的朋友访问一下你想检测的网站。
更专业一点的方法是利用网上的一些在线测试工具。比如下面几个网站可以从全球不同位置向你指定的网络地址发包,对是否可访问、响应速度和丢包率等指标进行测试:
下面两个网站还可以测试中国境内各个省份对指定站点的访问情况:
新主机的操作系统是Debian,可以通过apt-get方便地完成LAMP的安装部署。Apache模块的启用也可以通过a2enmod命令执行,而不用自己改配置文件。但还是出现了一些意外情况。
一是为Apache添加SSL,使网站支持https。这需要启用Apache的OpenSSL模块并做相应配置,还需要生成证书。站点是否可信需要由第三方机构证明,据说这种机构往往是收费的。幸运的是,还是有一个免费的:Let’s Encrypt。可以按照这个网站的Getting Started来为自己的站点添加SSL支持。这个过程会用到一个叫Certbot的工具。它可以将配置过程自动化,不用用户手动修改什么配置文件。
二是URL中始终要带有index.php才能访问博客中的文章。可是Apache的rewrite模块已经开启,我也将之前写的WordPress环境搭建日志提到的.htaccess文件放在了网站根目录。后来发现是需要在/etc/apache2/sites-available/目录下的000-default.conf文件和000-default-le-ssl.conf中加入下面一段配置:
...
# 站点根目录
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
...
三是安装和启用WordPress插件时,WordPress需要获取站点的ftp访问权限。我采用了vsftp。这需要一些配置。详见这篇文章:How to configure WordPress for automatic ftps updates using vsftp in Ubuntu。
捣腾一天之后终于在新主机上搭建好网站并将内容基本迁移完毕。虽然出了这么一档子事,但也借此机会学到了些东西。
本文在我的独立博客上的地址:http://zxtechart.com/2018/03/26/learnt-sth-after-site-is-blocked/