缘起
Hostinger是一个网络托管服务商,提供域名注册、虚拟主机、VPS等服务。 最近在Hostinger上入手了一个域名,打算把之前建的网站迁移到新的域名上。我一直在使用acme.sh为我的网站生成SSL证书。但是Hostinger不提供可供acme.sh调取的API,因此无法直接用acme.sh为托管在Hostinger上的域名生成SSL证书。Cloudflare是一家基于反向代理为客户提供内容分发网络的服务商,也提供域名解析服务,而且提供acme.sh可用的API,所以我就想将域名服务商从Hostinger迁移到Cloudflare。
迁移域名
创建Cloudflare账户
首先需要创建一个Cloudflare账户,直接创建就行,创建过程没有太多特殊要求。
添加域名
-
登录进Cloudflare账户后,进入首页,在首页点击
Add a site
,输入域名,点击Add site
。 -
然后需要选择一个套餐,这里免费套餐对我就足够了,点击
Confirm plan
,然后点击Confirm
。 -
接下来Cloudflare会扫描域名的DNS记录,定位你的域名之前使用的域名解析服务器,然后Cloudflare会提示你将域名解析服务器更改为Cloudflare的域名解析服务器。
-
这里需要登录之前的域名服务商的账户,例如我需要登录hostinger的账户,将域名解析服务器更改为Cloudflare的域名解析服务器。选择你需要迁移的那个域名,会显示域名的状态,以及域名解析服务器的名字,点击
Change
,按照上一步中Cloudflare给的提示,将域名解析服务器更改为Cloudflare的域名解析服务器。 -
更改完之后点击
Done, check nameservers
。然后需要等待一段时间让Cloudflare确认域名解析服务器已经更改为Cloudflare的域名解析服务器,这个过程可能需要几分钟到几个小时不等,Cloudflare确认后会发邮件通知你,等待过程中可以先进行下一步。
添加DNS记录
-
在Cloudflare的首页,点击
DNS
,然后点击Add record
,添加DNS记录。 -
将之前在Hostinger上的DNS记录全部添加到Cloudflare上。
迁移网站
生成SSL证书
这里我们使用acme.sh为网站生成SSL证书,acme.sh的安装和使用可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站。
需要注意的是,在上面的链接里介绍的生成SSL证书的方法是针对阿里云的,而Cloudflare的API和阿里云的API不太一样,需要使用不同的账户口令,分别是账户名(CF_Account_ID)、区域名(CF_Zone_ID)和口令(CF_Token)。这些都可以在Cloudflare的账户里找到。具体过程可参见acme.sh的使用文档。
这里我为所有网站都重新生成了SSL证书。
更改nginx反向代理配置
之前的反向代理配置文件都放在/etc/nginx/vhost
目录下,这里我将所有的配置文件中的旧域名都替换为新域名,注意如果在上一步中更改了SSL证书的存放路径,也需要将配置文件中的证书路径更改为新的路径。
更改docker-compose配置
最后将之前搭建网站的docker-compose配置文件中的旧域名都替换为新域名,然后重新启动docker-compose服务。
一些问题
Cloudflare的SSL/TLS加密设置
在做完上面的设置后,在通过新域名访问网站时出现了ERR_TOO_MANY_REDIRECTS
的错误:
这是因为在Cloudflare里SSL/TLS加密设置为了“Flexible”,这里需要将SSL/TLS加密设置为“Full”:
这样之前的网站就可以通过新域名访问了!