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

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

我通过阅读大量文章做了自己的研究,但是我还不太清楚主机名/ FQDN在我的虚拟主机业务中扮演了什么angular色。 以下是我设法找出的一些基本事实,如果有任何错误,请随时纠正我:

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

    63.117.14.58 www.yahoo.com什么

每个networking请求“www.yahoo.com”或“任何”将被redirect到IP地址63.117.14.58(这是google.com的IP)。 这是一种阻止本地机器中不需要的网站的方法。

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

 12.34.56.78(//my server's IP) myhostname.anything.com myhostname 

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

1)基于事实#3,我认为这行redirect服务器上的任何请求myhostname.anything.commyhostname我的IP地址,但这是什么意思? 用户计算机上的任何对myhostname.anything.com请求都不应该被转换为某个IP地址(不是我的IP地址)吗? 为什么我必须在我的服务器上redirect它? 我对HTTP请求如何工作的理解是,当用户input域名到浏览器中时,浏览器将联系域服务器,域服务器将根据域的DNSlogging将其引导到DNS服务器,然后DNS服务器将parsingIP地址,然后浏览器从该IP地址获取数据。 我的理解程序似乎与我的服务器上的“主机”文件无关。

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

B.如果我在这里设置不同的主机名,会发生什么?

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

D.如果我只设置了FQDN而不是主机名,会发生什么? 喜欢这个

 12.34.56.78(//my server's IP) myhostname.anything.com 

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

预先感谢您的时间。

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

主机文件与DNS

我不认为这需要很多解释,所以我会保持简短。 主机文件的目的是将主机定义为不依赖于DNS的IP地址映射。 对于服务器来说,最重要的是设备自己的名字,因为DNS服务器的问题很愚蠢,以至于你的设备无法通过名字引用自己。

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

主机名与FQDN

主机名称是设备名称,如果您愿意,也可以是节点名称。 这是一个唯一标识的名称,对设备所有者来说是有意义的,并不一定有意义,甚至可能暴露给使用设备上的服务的人。 这就是Linode所说的名称不需要与您托pipe的服务有任何关系的意思。

例如,假设您拥有一家名为Contoso的公司,并且您运营一个名为example.com的网站。 该网站托pipe在六台机器上,名为dalek01dalek06 。 所有的外部世界需要知道的是,如果他们将www.example.com插入他们的networking浏览器,他们可以得到他们想要的网站。 过于好奇的时间上议院不需要关心他们对www.example.com的请求是否由dalek03提供服务。

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

现在我们做一些棘手的事情。 讲故事的时间!

  • 您的公司Contoso拥有许多通过专用networking与dalek集群进行通信的台式机。
  • 当其中一台服务器出现问题时,您需要login具有问题的特定设备。 我们不能只连接到www.example.com ,因为它由几个不同的机器托pipe。 这是一件好事,我们有一个唯一标识名称的服务器有问题!
  • 由于我们拥有庞大的设备networking,因此我们想要使用DNS进行pipe理是最常见的。 这意味着我们需要将主机名dalek01dalek06到某个DNS域中。 幸运的是我们拥有contoso.com (以我们公司的名字命名),与www.example.com完全分开,这可能是我们的客户之一。
  • 因为互联网不需要知道我们的内部IP地址,所以我们维护一个叫做corp.contoso.com的专用DNS域。 我们所有的桌面机都configuration了一个DNSsearch后缀corp.contoso.com 。 这意味着如果我们创build一个名为dalek01.corp.contoso.com的DNS条目,我们networking上的任何人都可以简单地通过连接到他们的SSH客户端的dalek01来访问那台机器。 方便!
  • dalek01知道它被称为dalek01因为我们把它放在hosts文件中。 我们希望它知道,它也被称为dalek01.corp.contoso.com ,但我们不希望它依靠DNS来知道自己的名字。 那将是愚蠢的。 因此,我们在dalek01.corp.contoso.com的hosts文件中为dalek01.corp.contoso.com定义一个别名,以便知道它的全部名称。
  • 与此同时,人们继续使用www.example.com ,忘记了您有六台名为dalek01dalek06服务器,事实上您的公司名为Contoso(您的客户dalek06 ),或为了方便员工您通过dalek06.corp.contoso.comdalek01创build了DNSlogging。

把它放在一起

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

希望这涵盖了所有的基地。