本文转载自微信公众号「写代码的海怪」,作者海怪。转载本文请联系写代码的海怪公众号。
前言
上次写了一篇给 Gihub Pages 添加自定义域名的文章,之后感觉写得还是偏实践多一点,只做到了受人以鱼。
为了让大家在别的场景下也能搞定自定义域名,比如腾讯云网页部署、Heroku 自定义域名、自定义 CDN 域名。,今天就来写篇更通用的文章来总结一下自定义域名那些事。
由来
如果我们要访问一台电脑上的资源,一般是需要通过 IP 地址来进行访问的。比如电脑上跑了一个 React App,那么在电脑的 http://127.0.0.1:3000 就可以访问本机的页面
假如电脑 IP 地址为 192.168.1.10,而且手机和电脑都连上同一个 Wifi,那么在手机上输入 http://192.168.1.10:3000 也可以访问到这个网页。
当我们访问服务器上的文件(html, js, css 等),其实本质上也是访问远端的一台电脑,也需要通过 IP 地址来访问。这就导致一个问题了:没人能记得住这串数字。
既然记不住就起个名字喽。 这就是域名的由来,也就是像下面这样 Map。
- 名字 -> IP 地址
DNS 服务器
但是等我们给这个 IP 起了新名字之后怎么告诉别人呢?所以,得有一个超大日记本记录上面这些 Map 关系:
- taobao.com -> xxx
- baidu.com -> yyy
- ...
DNS (Domain Name System) 服务器就是帮我们记录并解析上面这些关系。这也就是为什么面试题 “输入 URL 之后会发生什么” 里会有一步是要到 DNS 服务器解析 IP 地址,好让我们访问到正确的服务器资源。
域名解析
当然,DNS 解析服务并不单单只有 域名 -> IP 一个功能,还能解析邮件服务器、CNAME 配置等。下面我就直接结合 腾讯云 的 DNS Pod 的解析规则来说明吧。
A 记录
首先,上面一直在说的 域名 -> IP 地址 这样的 Map 记录叫做 A 记录,也即 Active Record。 是最最最常见的域名解析。
比如我们买了个服务器,一般都会有公网的 IP 地址,我们只需要添加一条 A 记录,把域名指向自己服务器的 IP 地址就好了。
另一个常见的例子就是 Github Pages 自定义域名 其中 的一种配置:添加 4 条 A 记录,分别指向下面的 IP 地址:
- 185.199.108.153
- 185.199.109.153
- 185.199.110.153
- 185.199.111.153
CNAME
CNAME 就是域名的昵称,可能理解为 IP 的昵称(域名)的昵称(CNAME)就是 CNAME。其实我们平常更多接触到的并不是 A 记录,而是 CNAME 记录,常见于一些部署平台上。
当部署你的个人网页时,这些部署网站都会自动给你一个非常 Low 的域名,比如 Github Pages 的 haixiangyan.github.io,或者 Heroku 的 haixiangyan.heroku.app,再或者腾讯云的 “乱码” 域名 thedemo-9gf4vat5207cf224-1253834571.ap-shanghai.app.tcloudbase.com。
只要我们有了自己的域名,在 DNS 上添加一条 CNAME 记录,指向上面这些第三方服务商自动自成的域名,那么就能通过我们的域名直接访问第三方服务平台上的资源了。
另外一个常见的场景就是 CDN 服务器,如果在腾讯云上买了一个 CDN 服务器,它也会提供一个 “不那么乱码” 域名,比如我的个人网站就是 www.yanhaixiang.cn.cdn.dnsv1.com。同理,在 DNS 添加一条 CNAME 记录指向 CDN 提供的域名就能访问 CDN 上的资源了。
TXT
这个 TXT 记录,目前我使用到的场景是域名验证操作:当腾讯云要验证这个域名是否是合法/激活的,那么需要你在 DNS Pod 上添加一条 TXT 记录,记录值腾讯云会提供给你。
添加了之后,腾讯云就会查看这条 TXT 记录值是否正确,从而验证域名是否合法。
AAAA
上面的 A 记录填写都是针对 IPv4 的 IP 地址,也是最最最常见的 IP 地址。计算机发展到现在,有些已经用上了 IPv6 了,所以 AAAA 记录就是用来解析成对应的 IPv6 地址的,不过目前用的很少。
NS
NS 也就是 Name Server。还记得上面说到的 DNS 么?NS 可以理解为 DNS 服务器。
一般域名服务商都会有自己的 NS,并且都默认使用自己的 NS 来解析域名。如果你不想用当前这个域名服务商的 NS 来解析域名,也可以换成别家的。
除非有特别需求,NS 记录使用场景非常少。
MX
设置邮箱的记录。没怎么用过,不评价。
其它记录
我们一般接触到的就是上面这些记录,腾讯云还提供了别的记录类型:
注意,上面像 “显性 URL”、“隐性 URL” 可能在别的域名服务器是没有的,比如 namesilo.com 这个便宜货。
讲真,国内的云服务真的做的比国外好太多了,很多功能都很实用,强烈推荐大家使用国内的云。
子级域名
了解了 DNS 解析记录还不够,还得了解域名的分级。
比如 www.baidu.com,顶级为 com,二级为 baidu,三级为 www。当我们购买域名时,买的就是 顶级 + 二级域名,直接把顶级和二级域名锁死了。
当添加域名解析记录时,可以在 主机记录 这个字段里指定第三级的域名:
假如我有 yanhaixiang.com 这个域名,那么无论是 www.yanhaixiang.com 和 yanhaixiang.com 的第三级域名都是要指定的,并不是默认就是 yanhaixiang.com 了。
图里由上到下配置得到的域名完全体为:
主机记录 | 域名完全体示例 |
---|---|
www | www.yanhaixiang.com |
@ | yanhaixiang.com |
* | abc.yanhaixiang.com, fuck.yanhaixiang.com |
mail.yanhaixiang.com |
后面两个只是腾讯云给你的示例而已,就不举例了。
子级的好处就在于可以不用上线一个网站就买一个对应域名,太费钱了~ 比如我之前买了 yanhaixiang.cn 这个域名,当要用这一个域名分别指向 国内腾讯云上的个人网站,以及 Github 提供的 Github Pages,在添加两条记录之后:
就可以在 https://yanhaixiang.cn 访问国内的 腾讯云个人网站,在 https://github.yanhaixiang.cn 则访问 Github Pages 的个人网站,非常悠亚。
域名购买
国内:腾讯云、阿里云、华为云等都不错。国外:NameSilo、GoDaddy、AWS等。
个人推荐在国内买,原因是国内的云服务商功能非常齐全,而且服务之间关联度非常高,可以说有了国内域名走遍天下都不怕,没有国内域名啥都捉襟见肘。
域名起名
除了 .com 和 .cn 常见的顶级域名外,还有 .xyz,.top 这些便宜的顶级域名可以选择。
顶级域名中有一些是比较敏感的,比如 .law,这种就只能由专业机构来注册:
如果实在想要 .com 这种牛逼的顶级域名,可以试着买带 - 的二级域名,比如我之前就买了一个 easy-refer.com 的域名,19 刀/年。
二级域名允许有 - 的原因是为了解决名字的混淆问题,比如你的公司叫 Who Represents,然后你注册了一个 whorepresents.com 的网站,由于域名是不区分大小写的,很容易被误解为 Whore Presents ,变成了 妓女的礼物。除了这个,还有 Experts Exchange 的 expertsexchange.com 被理解成 Expert Sex Change,当场社死。
加了一个 - 连字符可以更好地 “分词”,不被别人误解网站内容。
二级域名除了英文还能选择中文的,比如《爱情公寓》里的 www.张伟是混蛋.com:
不开玩笑,这个网站也是能正常访问的,里面的内容都是和《爱情公寓》有关的内容。最旧的贴子是 2011 年,这个网站大概也是那个时候上线的吧,不知不觉已经过了 10 年了呢~
由于域名的 “唯一性”,在当年,注册了一个好的域名比建一个好看的网站更值钱,比如 apple.com, baidu.com 等。这也导致出现了一些投机分子:一出手就买一堆域名,然后等公司上门收购域名。
备案
只有国内的服务商需要做域名备案,也算是中国特色。最近我备案了 3 个域名,每个域名备案大概需要 1 个月的时间来备案。备案也不仅仅填几个表格就完事了,还是挺多地方要注意的。
先决条件
按照国内相关法律,域名备案前 必需要有一台租期大于 3 个月的服务器。 而国内一些云厂商为了能绑定销售,一般都要你买自家的服务器。
当然,只要有一台上面的服务器,在期间内可以给多个域名进行备案。
还有一点域名之间不能同时备案,一时间只能备案一个。所以如果你有多个域名要备案,要挑最紧急的那个来备案哦~
备案中
给你的网站起名是非常困难的一件事,我经常被打回,如果你做的是个人网站推荐使用 “个人项目展示” 这个名字,“个人网站” 是黑名单中的名字。
紧急联系人电话最好别瞎填,有的时候备案那边的人会抽查这个电话,如果这个紧急联系人电话打不通,接不了,那么你还得更换,更换本质上是又要有一遍备案流程,所以最好一开始就弄好这个,别问我是怎么知道的。
现在备案需要签署一份类似“合同”之类的文件,需要用到红色印泥,这个在打印室就有(当时我差点在网上买了一个)。
不过,就算备案有问题,工作人员几乎 1 天就打电话过来让你改正的,所以不用太慌~
总结
最后,稍微总结一下:
域名服务器 IP 的别名,方便大家记住服务器 IP 地址而生的
域名和 IP 地址的关系需要 DNS 服务器来解析。解析规则里 A 记录和 CNAME 记录用的最多
一个域名可以通过指定第三级域名来实现一个域名 host 多个网站
购买域名最好买国内的,一体性更强