Linux 托管:在 hosts 文件中设置主机名/FQDN 的目的是什么?

she*_*wen 7 linux hostname linode fqdn

我刚刚购买了Linode VPS 托管计划,并按照本指南进行设置。在“设置主机名”部分和“更新/etc/hosts”部分,它说这里设置的FQDN/主机名不需要与我即将托管的网站相关,这让我感到困惑。

我通过阅读大量文章进行了自己的研究,但仍然不太确定主机名/FQDN 在我的网络托管业务中扮演什么角色。以下是我设法找出的一些基本事实,如果有任何错误,请随时纠正我:

  1. FQDN 必须类似于 xxx.somedomain.com,如果是“xxx”。省略则它不是 FQDN。
  2. xxx,我认为可以宽松地称为子域,也可以根据被称为“主机名”,https://kb.iu.edu/d/aiuv
  3. 在我的本地机器上,通过将以下行添加到hosts文件中

    63.117.14.58 www.yahoo.com 随便

每个对“www.yahoo.com”或“whatever”的网络请求都将被重定向到 IP 地址 63.117.14.58(这是 google.com 的 IP)。这是一种阻止本地计算机中不需要的站点的方法。

现在教程建议将此行添加到我服务器中的“hosts”文件中

12.34.56.78(//my server's IP) myhostname.anything.com myhostname
Run Code Online (Sandbox Code Playgroud)

它提到在上面的行中,域名可能是也可能不是我将要托管的域,但主机名应该是我在前面的步骤中已经设置的。我的问题是:

1)基于事实#3,我觉得这条线重定向服务器上的任何请求myhostname.anything.commyhostname到我的IP地址,但是这是什么意思?myhostname.anything.com来自用户计算机的任何请求不应该已经转换为某个 IP 地址(无论是不是我的 IP 地址)?为什么我必须在我的服务器上重定向它?我对HTTP请求工作原理的理解是,当用户在浏览器中输入域名时,浏览器会联系域服务器,域服务器会根据域的DNS记录将其定向到DNS服务器,然后DNS服务器将解析 IP 地址,然后浏览器从该 IP 地址获取数据。我理解的这个过程似乎与我服务器上的“hosts”文件无关。

2) A.关于FQDN,为什么主机名必须与我在服务器上设置的主机名相同而域名却不是?

B.如果我在这里设置了不同的主机名会怎样?

C.这里设置或不设置我的域名作为FQDN的目的是什么?

D.如果我只设置 FQDN 而不是主机名会发生什么?像这样

12.34.56.78(//my server's IP) myhostname.anything.com
Run Code Online (Sandbox Code Playgroud)

很多问题,但我相信其中一些问题的答案是重叠的,总的来说,我认为最大的问题是“设置主机名/编辑主机文件在我的网络托管业务中扮演什么角色?”

提前感谢您的时间。

And*_*w B 14

人们很难回答这个问题,因为它从一个更简单的前提开始,然后从那里进入一个很深的兔子洞。让我们从头开始。

主机文件与 DNS

我认为这不需要太多解释,所以我会保持简短。hosts 文件的目的是定义不依赖于 DNS 的主机到 IP 地址的映射。对于服务器而言,其中最重要的是设备自己的名称,因为 DNS 服务器出现问题以防止设备能够通过名称来引用自身是愚蠢的。

只要我们只使用主机文件,我们就根本不需要使用域。DNS 不涉及,所以谁在乎?不幸的是,随着我们网络的发展,让每个设备独立跟踪我们网络上所有设备的名称变得越来越不可持续。这导致我们使用 DNS,并引入了一些新的后勤障碍。

主机名与 FQDN

如果您愿意,主机名是设备名称或节点名称。它是一个对设备所有者有意义的唯一标识名称,不一定对使用设备上的服务的人有意义,甚至不公开。这就是 Linode 的意思,它说名称不需要与您托管的服务有任何关系。

例如,假设您拥有一家名为 Contoso 的公司,并且您运营着一个名为example.com. 该网站托管在六台机器上,dalek01通过dalek06. 外界需要知道的是,如果他们插入www.example.comWeb 浏览器,就可以访问他们想要的网站。过于好奇的时间领主不必担心他们的请求www.example.com是由dalek03.

就其本身而言,主机名并不一定与 DNS有任何关系。它只是设备的名称,甚至不一定有与之关联的域后缀。到目前为止很简单!

现在我们让事情变得有点棘手。讲故事的时间!

  • 您的公司 Contoso 拥有许多通过专用网络与 dalek 群集通信的台式机。
  • 当其中一台服务器出现问题时,您需要登录出现问题的特定设备。我们不能只是连接到www.example.com,因为它由几台不同的机器托管。我们为有问题的服务器提供了唯一标识名称,这是一件好事!
  • 由于我们拥有庞大的设备网络,因此我们最常希望使用 DNS 对其进行管理。这意味着,我们需要坚持的主机名dalek01通过dalek06进入DNS域名的地方。幸运的是,我们拥有contoso.com(以我们公司的名字命名),完全独立于www.example.com,这可能是我们的客户之一。
  • 因为互联网不需要知道我们的内部 IP 地址,所以我们维护了一个名为corp.contoso.com. 我们所有的台式机都配置了 DNS 搜索后缀corp.contoso.com. 这意味着如果我们创建一个名为 的 DNS 条目dalek01.corp.contoso.com,我们网络上的任何人都可以通过连接到dalek01他们的 SSH 客户端来访问该机器。方便的!
  • dalek01知道它被调用dalek01是因为我们把它放在了 hosts 文件中。我们希望它知道它也被称为dalek01.corp.contoso.com,但我们不希望它依赖 DNS 来知道它自己的名字。那将是愚蠢的。因此,我们dalek01.corp.contoso.com在 hosts 文件中定义了一个别名,dalek01以便它知道它的所有名称。
  • 与此同时,人们继续使用www.example.com,而忽略了以下事实:您有六个名为dalek01through 的服务器dalek06,您的公司名为 Contoso(您的客户除外),或者为了方便您的员工,您为dalek01through创建了 DNS 记录dalek06.corp.contoso.com

把这一切放在一起

  • 您的主机名对您和运行服务器的人有意义,不一定对使用其服务的人有意义。
  • 除非您拥有多个共享专用网络的设备,否则主机名不需要存储在 DNS 中(或根本没有 DNS 域)。
  • 服务器依赖 DNS 与自己对话是愚蠢的。
  • 将您的主机名放在 DNS 中还需要在您的主机文件中定义该 FQDN,以便它不依赖于 DNS 使用 FQDN 与自己对话。(如前所述,这很愚蠢)

希望这涵盖了所有基础。