解析子域名时发生的误会

起因

这次重建博客,我打算彻底抛弃以前的思路,将主域名作为个人主页,而把 Blog 与 Photo 分别放在子域名上。于是我便按照传统设置域名解析的方法,给子域名创建了两条 CNAME 记录,分别为 www.blog.sayhi.moe 和 blog.sayhi.moe。但是在网站搭建好后进行测试时,发现输入 www.blog.sayhi.moe 时会出现警告"此网站无法提供安全链接,因为使用了未受支持的协议",而输入 blog.sayhi.moe 却可正常访问。

经过

看到无法提供安全链接,我第一时间想到的便是 SSL/TLS 的问题,因为在我的服务器设置里,我把允许的TLS最低等级从默认的 1.0 升级到了 1.1,并且启用了 TLS 1.3 版本,会不会是因为我的设置导致了浏览器不兼容?于是我把设置调整会默认后,重新尝试,发现依然错误。

那么,有没有可能是配置 DNS 解析时发生了错误?于是我在 Cloudflare 里把指向子域名的两条记录更改为仅限 DNS ,结果发现可以正常访问,虽然没有了 Https ,但可以排除是 DNS 错误。

既然我已经来到了 Cloudflare ,我便打开了 Cloudflare 的社区页面,看看有没有与我同样的人遇到这个问题的。最后,我看到了来自官方的回答,其中有这样一段:

Understand how the certificate works
Certificates will only cover a single level of subdomains (.example.com,but not *…example.com):

Will work - www.example.com
Will work - example.com
Will work - test.example.com
Will NOT work - www.test.example.com
Will NOT work - staging.www.example.com

我这才发现,我当时是对主域名申请的 SSL 证书,但是它不能对带 www 的子域名提供安全验证!但为什么会这样呢?

对域名一直以来的错误认识

原因

经历过上面的错误后,我突然意识到了一直以来,我没有去查过"域名"这个词的概念,而是凭借着自己的网络知识私自给它下了一个定义,并把 www.sayhi.moe 和 sayhi.moe 化作了等号,可事实不是这样的。

我们翻看阿里云对于域名的定义可以看到:

“.com”是顶级域名(一级域名);
“aliyun.com”是主域名(二级域名);
“example.aliyun.com”是子域名(三级域名);
“www.example.aliyun.com”是子域名的子域(四级域名)。

所以其实对于我自己的网站来说,"www.sayhi.moe"是"sayhi.moe"的子域,"www.blog.sayhi.moe"是"blog.sayhi.moe"的子域,他们并不是相等的。且我是对"*.sayhi.moe"申请的 SSL 证书,不能适用于"www.bug.sayhi.moe",自然也就会提示无法提供安全链接了。

反思

对于网络这方面知识,我自认为还是比较了解的,所以有时会表现的自大。且我对于网站搭建的相关知识并没有去进行一个全面的、系统的了解,所以会导致对很多基础知识掌握的并不牢固甚至可以说不了解,容易犯一些奇奇怪怪的问题,这一点需要改进!

奇怪的假设思路:将错就错

这个问题可以说是很好解决,我们只要在网站上进行跳转时避免设置 www 即可。但是,假设如果今日有人偏要访问"www.blog.sayhi.moe",该如何去应对呢?
我们可以将错就错,把"www.blog.sayhi.moe"301重定向到"blog.sayhi.moe"即可

Edit with Markdown