在 GitHub 页面上使用 `www` 域的建议是什么?

What is with the reccommendation to use `www` domain on GitHub Pages?

如果您查看 GitHub 页面的文档,它强烈建议您使用 www 域作为托管在 GitHub 页面上的自定义域站点。

从这里开始:https://help.github.com/en/articles/about-supported-custom-domains#www-subdomains

A www subdomain is the most commonly used type of subdomain, in which the www stands for World Wide Web. For example, www.example.com is a www subdomain because it contains the subdomain part www.

We strongly recommend that you use a www subdomain for these reasons:

  • It gives your GitHub Pages site the benefit of our Content Delivery Network.
  • It is more stable because it is not affected by changes to the IP addresses of GitHub's servers.
  • Pages will load significantly faster because Denial of Service attack protection can be implemented more efficiently.

这是否意味着如果我不使用 www 域,我将无法享受 CDN 或 DDOS 攻击保护的好处?

这里 www 和非 www 域之间存在差异的技术原因是什么?

DNS 不提供可靠的机制来转发 apex/root 记录(例如 example.com),但提供子域 (CNAME)。实际上,这意味着虽然您可以将 A 记录指向与 Github 基础设施上的节点相对应的单个 IP 地址,但它们无法将您的 apex 记录的 DNS 查找路由到其他更接近请求 (CDN) 或使用 DNS 减轻 (D)DoS 攻击影响的 IP 地址。

一些 DNS 提供商确实提供模拟 CNAME 记录行为的合成记录(ALIAS、ANAME)和顶级域(例如 dnsimple),但它们并不广泛可用,会带来额外的复杂性和延迟,并且不向 Github 等人提供相同级别的地理路由机会。

区别在于您如何将网站指向 GitHub 的 DNS 服务器。

DNS 最简单的用法是使用 A 记录指向 IP 地址的任何级别的域名。所有用户都将使用相同的地址,并且只能由添加 A 记录的“区域”的所有者更改 - 在这种情况下,您正在配置自定义域的区域。

更聪明的方法是 别名 一个特定的域名到不同的区域 - 在本例中由 GitHub 管理 - 使用 CNAME 记录。然后该区域的所有者可以根据需要更改 IP 地址,甚至可以根据用户的位置(这是 CDN 引用的来源)为不同的用户提供不同的答案。

然而,关键限制是您不能将 CNANE 用作区域的根。有关技术详细信息,请参阅 this Server Fault question

如果您拥有“example.com”,您可以将该域的根目录的 A 记录指向一个 GitHub IP 地址(或几个,基本上由访问者随机选择),但如果您将 CNAME 指向 sub-domain,例如“www.example.com”,GitHub 将给予更多自由来路由流量。

一些 DNS 提供商提供了解决此限制的工具,方法是为看起来像 CNAME 的域的根添加虚假记录,但标签可能不同(例如 ANAME、ALIAS)。当被要求提供根 A 记录时,DNS 提供商会查找该域的实际 A 记录和 returns 那些。这对于随时间变化的记录很有用,但由于地址是由您的 DNS 提供商而不是实际访问者查找的,它可能仍然会阻止 GitHub 为该访问者提供最佳地址。