昨晚睡前想到可以用CDN加速网站访问。正好域名已备案,并且七牛的账户里有钱,不用简直天理不容,于是立马决定上七牛云的cdn。本以为老司机出马肯定顺风顺水水到渠成,没想到阴沟里还差点翻了船。
本文对七牛云在配置HTTPS做记录和整理,并给出了一些坑的解决办法。
出师未捷身先死
喝了枸杞茶泡完脚,一顿操作猛如虎,打开七牛云和DNS解析就是干。总结起来主要操作为:
- 上传已有SSL证书到七牛云控制台;
- 七牛云配置域名为强制HTTPS访问;
- 在域名DNS中新增一条A记录,IP指向源站;
- 源站配置用域名,回源HOST留空;
- 将域名的@记录CNAME到七牛云给的域名,www记录CNAME到@记录。
配置好后访问网站,发现画风与想象的不一样,提示500错误:
curl
开-vv
查看日志,相同的提示:
因为一次性弄了两个域名,不清楚是DNS还是七牛云配置的问题,加上源站测试上的误解,一时心烦意乱。眼看快到十二点,养生保头发要紧。于是把DNS记录还原,睡后再说。
知耻而后勇,再战告捷
回想昨天的经历,醒来后就不甘心,简直是嘲讽啊!必须弄好噎下这口气。
一个细节是源站设置后续验证不通过,这要先处理掉。再次进入七牛云的控制台,仔细研究“源站配置”这一栏。“源站域名”、“IP地址”都好理解,但“回源HOST”一时拿捏不准。于是打开帮助文档:
什么是回源 HOST ?
回源 HOST :是指 CDN 节点在回源过程中,在源站访问的站点域名。
CDN 配置时,回源 HOST 和源站有什么区别?
源站:源站决定了回源时,请求到哪个 IP 。 回源 HOST : 回源 HOST 决定回源请求访问到该 IP 上的哪个站点。 – 例子1:源站是域名 源站为 www.a.com ,回源 HOST 为 www.b.com 。 那么实际回源是请求到 www.a.com 解析到的 IP ,对应的主机上的站点 www.b.com 。 – 例子2:源站是 IP 源站为 1.1.1.1 ,回源 HOST 为 www.b.com 。 那么实际回源的是 1.1.1.1 对应的主机上的站点 www.b.com 。
现在看来解释得很清楚,就是向服务器请求时的主机名。由于用的子域名,所以回源HOST应该填写子域名,不能使用默认的加速域名。顺带吐槽一下七牛云,“源站测试”处显示的地址应该是“http(s)://回源HOST/资源名”的格式,否则理解上会有问题:
- 不填写回源HOST,并且源站主机上有多个站点且强制HTTPS跳转的情况下,显示的链接明明可以访问,但是七牛云测试不通过,因为七牛云请求的主机名是加速的主机名;
- 填写IP并使用HTTPS的情况下,测试资源显示为“https://IP/资源名”。IP不是完全限定域名(FQDN),不能使用HTTPS,这个资源地址一看就有问题。
“回源HOST”+“测试资源显示”两个坑(也可算同一问题)让我有点佛了,但还没想到西游记。理解清楚后,发现不需要添加A记录用IP就能回源,还能省去更改源站web服务器的麻烦。配置好后,“https://域名”形式终于能正常访问了。
但事情还没有结束。虽然现在少用www
,但是应该让https://www.a.com
也能正常访问。直接把www
主机CNAME到”@”记录,访问”https://www.a.com”会提示域名解析不正确。神奇的是能ping
通,并且显示七牛云的IP。用curl
调试”http://www.xxx.com”,发现如下输出:
这是七牛云返回的结果,提示www.a.com
这个主机名没有DNS记录。简单来说就是这个主机名没有在七牛云上注册,所以七牛云拒绝请求。解决的办法很简单但有点繁琐:参考默认主机名对www
再配置一次。
总结
本人博客的CDN用的cloudflare
,其HTTPS流量也免费,并且配置上非常省心:将DNS解析交给cloudflare
,基本上就完成了子域名的无缝迁移。cloudflare
可以自己签发证书,有DNS解析服务,这是其提供便利服务的基础。在JTTPS页面分发上,七牛云配置稍显繁琐,个人认为体验上有待提高。
发表回复