域名与网站加速
本文基于Hexo建站,部署在GitHub Page上;现已整体搬迁到了VuePress,部署在Vercel,参见VuePress建站。
# 1. 域名
利用cdn进行网站加速需要一个域名。在又拍云上试了下https://chenhuizhu-0930.GitHub.io/Blog/
这种是不可以的,为了网站的访问体验感,买了个便宜的域名。我用的namesilo (opens new window),一年的.top
结尾的域名首次1刀,续费4刀左右,白菜价还可以。不过没想到的是换了域名之后,卜算子对于网站流量的计算都清零了哇┭┮﹏┭┮
# 1.1 域名配置
参考GitHub域名配置文档 (opens new window)
注意:如果用的是Hexo,部署GitHub需要把CNAME文件放入source文件夹,直接放在GitHub上部署时又没有了。
# 1.2 域名解析到服务器
在域名管理器中,CNAME 记录和 A 记录是两种常见的 DNS 记录类型,它们的主要区别如下:
- 定义与作用
- A 记录:A 记录是将域名直接映射到一个 IPv4 地址。例如,当你访问
www.example.com
时,通过 A 记录,域名系统会将其解析为服务器的具体 IP 地址,如192.168.1.100
,这样浏览器就能找到目标服务器并获取网页内容。 - CNAME 记录:CNAME 记录是将一个域名指向另一个域名,而不是直接指向 IP 地址。它常用于为某个域名创建别名。例如,你可以创建一个 CNAME 记录,将
blog.example.com
指向www.example.com
,这样访问blog.example.com
时,实际上会访问到www.example.com
对应的网站内容。
- A 记录:A 记录是将域名直接映射到一个 IPv4 地址。例如,当你访问
- 使用场景
- A 记录:适用于需要明确指定域名对应的服务器 IP 地址的情况,比如网站、邮件服务器等。当你拥有自己的服务器,并希望通过域名来访问服务器上的服务时,就需要设置 A 记录。
- CNAME 记录:常用于以下几种情况。一是当你使用第三方服务,如 CDN(内容分发网络)服务时,CDN 提供商通常会要求你创建一个 CNAME 记录,将你的域名指向他们的服务器地址,以便实现内容的缓存和分发;二是为了方便管理域名,你可以为多个子域名创建 CNAME 记录,指向同一个主域名,这样在主域名的 IP 地址发生变化时,只需修改主域名的 A 记录,而无需逐个修改子域名的记录。
- 解析优先级
- A 记录:在域名解析过程中,A 记录的优先级较高。当 DNS 服务器收到一个域名解析请求时,会首先查找该域名是否有 A 记录,如果存在,则直接返回 A 记录对应的 IP 地址。
- CNAME 记录:如果域名没有 A 记录,DNS 服务器才会查找 CNAME 记录。找到 CNAME 记录后,它会根据 CNAME 指向的目标域名继续进行解析,直到找到最终的 A 记录或其他可解析的记录类型。
- 限制与注意事项
- A 记录:一个域名可以有多个 A 记录,这意味着可以将同一个域名指向多个不同的 IP 地址,实现负载均衡等功能。但每个 A 记录都必须对应一个有效的 IPv4 地址。
- CNAME 记录:一个域名不能同时存在 A 记录和 CNAME 记录(除了根域名可以有 A 记录和 CNAME 记录共存的特殊情况)。此外,CNAME 记录不能与其他类型的记录(如 MX 记录、TXT 记录等)同时存在于同一个域名下,因为 CNAME 记录会将域名完全映射到另一个域名,会导致其他记录失效。
# 1.3 域名的概念
# 1.3.1 根域名/裸域名
根域名(即裸域名)不能设置CNAME,需要用A记录把根域名解析到服务器。其他的子域名和主域名设置CNAME就可以。添加多条A记录可以实现负载均衡。
# 1.3.2 子域名&主域名
- 内容组织:可将网站不同部分或功能模块分开,如
blog.example.com
用于博客,shop.example.com
用于电商商店,support.example.com
用于技术支持 ,让用户快速找到所需内容,提升网站可导航性。 - 独立运营:子域名能有独立内容、设计和设置,甚至可托管在不同服务器。企业可将博客放
blog.example.com
,主网站放www.example.com
,便于分区管理和运营。
我给我的子域名和主域名的DNS设置如下👇(今晚把GitHub子目录下的内容搬到了主目录,so目前内容是一样的啦,后面博客更新准备只部署主站,子域名开发一个新的用途出来~)
# 2. 网站加速
# 2.1 GitHub + jsdelivr
# 2.1.1 CDN
CDN的本质,是将用户的请求中转到某一个中间的服务器上(书报亭)。当用户请求网站时,由这些中间服务器代替网站源服务器响应用户请求,如果用户请求的一些资源不包含在中间服务器上,那么此时再由中间服务器向源服务器请求,从而大大减少了源服务器的资源消耗。另外,CDN的负载均衡还能将用户的请求分发到最佳的中间服务器上,从而大大的加快了用户的访问速度。
# 2.1.2 jsdelivr
阿里云和腾讯云的 CDN 与 jsDelivr 提供的都是内容分发网络(CDN)服务,其基本原理都是将内容缓存到离用户近的节点,使用户可就近获取内容,从而提高访问速度。 不过阿里云、腾讯云的CDN大都要求你的域名通过备案,所以部署在GitHub Pages上的网站是没办法使用它们的CDN服务的。 2021年由于种种原因,icp备案失效,失去了国内加速且DNS遭到污染。具体参见【杂谈】jsDelivr域名遭到DNS污染 (opens new window)
# 2.2 又拍云的CDN服务
可不备案,但要提供域名。加入又拍云联盟可享受其提供的cdn服务。
# 2.3 GitHub + Vercel
Vercel拥有自己的CDN且为全球CDN网络,而GitHub使用Fastly CDN作为CDN服务提供商,在中国地区的访问速度较慢,且缺乏灵活的地理路由功能。
如果你只用 Vercel 托管,通常不需要推送静态文件到 GitHub,只需推送源代码(.md 文件、配置等)即可。Vercel 会自动生成和分发静态内容。
例外情况:如果想保留 GitHub 作为备份或协作平台,可以继续推送源代码,但要避免推送 public 目录,并禁用 GitHub Pages 的自动构建。
# 2.4 其他
Gulp:对于生成的css、js、html、图片等文件,可以使用gulp自动化工具进行压缩以加快网站加载速度,参考Butterfly官方教程 (opens new window),安装gulp本体以及插件
Netlify托管