blog
blog copied to clipboard
更换划词翻译网站域名
划词翻译的网站目前挂在我自己的个人域名下 https://hcfy.limingkai.cn,但是这样有一些问题:
- 划词翻译作为一款独立的软件,有自己独立的域名才更合理。
- Chrome Web Store 在显示扩展的网址时,只能显示顶级域名,以至于现在划词翻译的提供方显示的是
limingkai.cn。 - Google AdSense 在填写网址时,只能填写顶级域名,不能填写二级域名,我申请的时候只能填写 https://limingkai.cn,但我的个人主页没有内容,审核无法通过。
于是,我购买了新的域名 hcfy.app 并准备将网站迁移到新域名上,顺便将划词翻译服务器的接口地址 hs-api.limingkai.cn 也迁移到 api.hcfy.app。
文档站的迁移
一、将新域名添加进 Netilfy
首先得让新域名也指向文档站才行。
划词翻译的文档站托管在 Netilfy 上,要让 hcfy.app 也指向文档站,只需要将它添加进 Netlify 即可。另外,我还将 www.hcfy.app 也加进去了,因为当我将 hcfy.app 设置为主要地址之后,www.hcfy.app 就会自动跳转到 hcfy.app。
但是,我还不能将主要访问地址从 hcfy.limingkai.cn 切换为 hcfy.app,因为服务器上的地址还没有变更。
二、将新域名加入服务器代码中
由于“忘记密码”的功能是写在文档站里的,所以服务器里允许了来自 hcfy.limingkai.cn 的跨域请求,现在如果要将文档站的访问地址改为新域名,那么也要将服务器里的允许跨域的地址更新一下。
开始迁移
最终的迁移步骤如下:
- 将新域名加入到服务器的允许跨域访问的地址列表里并发布代码。
- 等代码上线之后,去 Netlify 里将主要地址切换到新域名。
- 让 hcfy.limingkai.cn 跳转到新域名。
这一切完成之后,就该迁移其它部分了,例如 Google Analytics 也应该换地址了。
遇到的问题
在经过一段时间测试后,我发现 https://hcfy.app 偶尔会需要开代理才能打开,而 https://www.hcfy.app 则没有这个问题。
hcfy.app 使用 A 记录指向了 Netlify 提供的 IP 75.2.60.5,即使在出现问题的时候,这个 IP 也是可以 ping 通的,所以我估计是这个 IP 被墙了。这样一来,我只能把 hcfy.app 重定向到 www.hcfy.app 了,但是在 DNSPod 里,重定向功能只开放给备案了的域名,于是我决定将域名的 DNS 解析到 CloudFlare 里。
在 CloudFlare 里配置好 www 的 CNAME 记录之后,我访问了一下 www.hcfy.app,但是显示了一个跟 HTTPS 证书有关的 Error 525 的错误。经过一番搜索,我发现了这个地址:Why isn’t my SSL certificate provisioning automatically with Cloudflare & Netlify?
简单点说,默认情况向下,CloudFlare 在用户和 Netlify 做了一层代理,而 CloudFlare 自动给域名安装了 SSL 证书,但是 Netlify 也安装了证书,所以造成冲突了。而且,上面的链接中也提到不应该给 Netilfy 开启 CloudFlare 的代理,因为 Netlify 本身就有加速服务,这相当于给源站套了两层加速,但这没必要。
解决办法也很简单,只需要在 CloudFlare 里给 DNS 记录关闭代理就行了。关闭之后,会显示为“仅限 DNS”。
配置好 www.hcfy.app 之后,接下来就是在 CloudFlare 里添加两条页面转发规则了:
http://hcfy.app/* 301 https://www.hcfy.app/$1
https://hcfy.app/* 301 https://www.hcfy.app/$1
可是我还是想直接在 hcfy.app 显示内容
域名前多出的 www 总让我觉得不舒服,但是在查询了 Netlify 的文档(Apex domains and www subdomains)之后,我发现 CloudFlare 支持给顶级域名设置 CNAME,它们称之为 CNAME 扁平化的技术。
于是我删除了前面设置的页面跳转规则,然后将 hcfy.app 的 A 记录改为 CNAME 并指向了 Netlify,大约 5 分钟后,果然可以正常访问了——不得不感慨一句真香。
将 hcfy.limingkai.cn 跳转到 hcfy.app
当我在 DNSPod 上设置将 hcfy.limingkai.cn 跳转到 hcfy.app 的时候,DNSPod 告诉我 hcfy.app 没备案所以不能跳转。现在有三个办法:
- 在 Netlify 里做跳转。尝试添加了如下配置可是不起作用。
[[redirects]]
from = "https://hcfy.limingkai.cn/*"
to = "https://hcfy.app/:splat"
- 在 js 代码里做跳转。虽然能达到效果,但这毕竟不是 301 重定向,一来对搜索引擎不友好,二来网站会被加载两次,会稍微降低访问速度。
- 把 limingkai.cn 也从 DNSPod 迁移到 CloudFlare 然后配置 301。这是最好的办法,对搜索引擎也很友好,但我暂时没有这么做。原因之一是 hs-api.limingkai.cn 用 acme.sh 生成了证书,所以估计迁移过去之后得重新配置一下 acme.sh,而且还不知道会不会影响到 hs-api.limingkai.cn 的解析。acme.sh 配置方式见 #85
之后要做的事情
- 修改划词翻译内的网站地址。
- 修改文档站里的网站地址。
- 去 Google Analytics 给新网址创建分析报表。
- 做好 301 重定向后,去百度搜索资源平台和 Google Search Console 提交一下网址变更。
- 将划词翻译的相关邮箱也迁移到 hcfy.app。
301 跳转的具体执行步骤
- 先把 DNSPod 里的记录全都填写进 CloudFlare 里,并提前设置好将 hcfy.limingkai.cn 跳转到 hcfy.app
- 等到低峰期的时候,将 nameservers 改为 CloudFlare 的,观察是否有问题
- 在服务器上用 acme.sh 的 CloudFlare 的方式重新生成 hs-api.limingkai.cn 的证书并重启服务器看看有没有问题
接口地址的迁移
文档站的迁移很简单,但是接口地址的迁移让我犯了难。
用户认证的 cookie 是保存在 hs-api.limingkai.cn 的,如果我将接口地址切换到新域名,那么已经登录的用户全都需要重新登录一次,这显然是不行的。
然后我想到让 hs-api.limingkai 和 api.hcfy.app 共存。Node.js 确实支持给同一个服务器配置多个 SSL 证书,但是这样治标不治本——我还是不能把代码里的接口地址改为新域名。
暂时没想到什么好的办法,接口地址的迁移只能先搁置了。