![Linux 主机:在 hosts 文件中设置主机名/FQDN 的目的是什么?](https://linux22.com/image/674128/Linux%20%E4%B8%BB%E6%9C%BA%EF%BC%9A%E5%9C%A8%20hosts%20%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AE%BE%E7%BD%AE%E4%B8%BB%E6%9C%BA%E5%90%8D%2FFQDN%20%E7%9A%84%E7%9B%AE%E7%9A%84%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我刚买了一个利诺德VPS 托管计划并遵循此指导设置。在“设置主机名”部分和“更新 /etc/hosts ”部分,它说这里要设置的 FQDN/主机名不需要与我将要托管的网站相关,这让我很困惑。
我通过阅读大量文章进行了研究,但仍然不太确定主机名/FQDN 在我的网络托管业务中扮演什么角色。以下是我设法找出的一些基本事实,如果有任何错误,请随时纠正我:
- FQDN 必须是类似 xxx.somedomain.com 的格式,如果省略“xxx.”那么它就不是 FQDN。
- 我认为可以将其
xxx
笼统地称为子域名,也可以称为“主机名”,根据https://kb.iu.edu/d/aiuv。 hosts
在我的本地机器上,通过在文件中添加以下行63.117.14.58 www.yahoo.com 任意
所有对“www.yahoo.com”或“其他”的网络请求都将被重定向到 IP 地址 63.117.14.58(即 google.com 的 IP)。这是一种在本地机器上阻止不受欢迎网站的方法。
现在本教程建议将此行添加到我的服务器中的“hosts”文件中
12.34.56.78(//my server's IP) myhostname.anything.com myhostname
它提到,在上面这一行中,域名可能是也可能不是我要托管的域名,但主机名应该是我在前面的步骤中已经设置的主机名。我的问题是:
1)基于事实#3,我认为这行将服务器上的任何请求重定向myhostname.anything.com
到myhostname
我的 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
有很多问题,但我相信其中一些问题的答案是重叠的,总的来说,我认为最大的问题是“设置主机名/编辑主机文件在我的网络托管业务中起什么作用?”
提前感谢您的时间。
答案1
回答这个问题会很困难,因为它从一个简单的前提开始,然后进入一个很深的兔子洞。让我们从头开始。
主机文件与 DNS
我认为这不需要太多解释,所以我会简短地介绍。hosts 文件的目的是定义不依赖 DNS 的主机到 IP 地址映射。对于服务器来说,其中最重要的是设备自己的名称,因为如果 DNS 服务器出现问题而导致设备无法通过名称引用自身,这是很愚蠢的。
只要我们只使用主机文件,我们就根本不需要使用域。DNS 不参与,所以谁在乎呢?不幸的是,随着我们网络的增长,让每台设备独立跟踪网络上所有设备的名称变得越来越不可持续。这导致我们使用 DNS,并引入了一些新的后勤障碍。
主机名与 FQDN
主机名是设备名称,或者您喜欢的节点名称。它是一个唯一标识名称,对设备所有者有意义,但对使用设备上的服务的人来说不一定有意义,甚至不一定是公开的。这就是 Linode 所说的名称不需要与您托管的服务有任何关系的意思。
例如,假设您拥有一家名为 Contoso 的公司,并且运营一个名为 的网站example.com
。该网站托管在六台机器上,分别命名dalek01
为 至dalek06
。外界只需知道,只要他们接入www.example.com
Web 浏览器,就可以访问他们想要的网站。过于好奇的时间领主无需关心他们的请求是否www.example.com
由 提供服务dalek03
。
主机名本身并不一定具有任何事物与 DNS 完全无关。它只是设备的名称,甚至不一定具有与之关联的域后缀。到目前为止,它很简单!
现在我们让事情变得有点棘手。故事时间到了!
- 您的公司 Contoso 拥有多台台式机,可通过专用网络与 dalek 集群进行通信。
- 当其中一台服务器出现问题时,您需要登录到出现问题的特定设备。我们不能直接连接到
www.example.com
,因为它由几台不同的机器托管。幸好我们有一个唯一标识出现问题的服务器的名称! - 由于我们拥有庞大的设备网络,因此我们最常使用 DNS 来管理它。这意味着我们需要将主机名粘贴
dalek01
到dalek06
某个 DNS 域中。幸运的是,我们拥有contoso.com
(以我们公司的名字命名),与 完全独立www.example.com
,后者可能是我们的客户之一。 - 由于互联网不需要知道我们的内部 IP 地址,因此我们维护一个名为 的私有 DNS 域
corp.contoso.com
。我们所有的台式机都配置了 DNS 搜索后缀corp.contoso.com
。这意味着,如果我们创建一个名为 的 DNS 条目,我们网络上的任何人都可以通过使用其 SSH 客户端dalek01.corp.contoso.com
连接到 来访问该机器。方便!dalek01
dalek01
知道它叫什么,dalek01
因为我们把它放在 hosts 文件中。我们希望它知道它也叫什么,但我们不希望它依赖 DNS 来知道自己的名字。那样太愚蠢了。因此我们在 hosts 文件中dalek01.corp.contoso.com
为 定义了一个别名,这样它就知道它的所有名字。dalek01.corp.contoso.com
dalek01
- 与此同时,人们继续使用
www.example.com
,却没有注意到您有六台dalek01
通过命名的服务器dalek06
,您的公司名为 Contoso(您的客户除外),或者为了方便您的员工,您通过 创建了 DNSdalek01
记录dalek06.corp.contoso.com
。
综合起来
- 您的主机名对您和运行服务器的人员有意义,但对使用其服务的人来说不一定有意义。
- 除非您拥有共享专用网络的多台设备,否则主机名不需要存储在 DNS 中(或者根本没有 DNS 域)。
- 服务器依赖 DNS 进行自身通信是愚蠢的。
- 将主机名放入 DNS 中会导致需要在主机文件中定义 FQDN,这样它就不会依赖 DNS 使用 FQDN 与自身通信。(如上所述,这样做很愚蠢)
希望这涵盖了所有基础。