在 Linux 系统上,我看到了与环回地址、本地主机和服务器别名有关的 /etc/hosts 配置的许多变体。有些将服务器名称作为本地主机/环回地址 (127.0.0.1) 的别名,而有些则没有。我试图找出其中哪一个是最“正确的”,以及不正确的设置可能导致哪些问题。
例如,对于名为 alice 的虚拟服务器,其 FQDN 为 alice.example.com,IP 为 192.168.42.42,我看到了这些 /etc/hosts 配置(以及更多):
Option 1:
127.0.0.1 alice.example.com alice localhost.localdomain localhost
192.168.42.42 alice.example.com alice
Option 2:
127.0.0.1 localhost.localdomain localhost alice.example.com alice
192.168.42.42 alice.example.com alice
Option 3:
127.0.0.1 localhost.localdomain localhost alice
192.168.42.42 alice.example.com alice
Option 4:
127.0.0.1 localhost.localdomain localhost
192.168.42.42 alice.example.com alice
那么,在这些选项中,哪一个最正确?我自己倾向于选择选项 4,但我对此没有合理的理由。我对选项 1 特别怀疑,因为它不是将 FQDN 机器名称设置为 127.0.0.1 和 192.168.42.42 的规范名称吗?我不确定这与例如选项 2 有何不同,在选项 2 中它只是 127.0.0.1 的“别名”。
答案1
我认为这个问题是“本地机器应该如何命名给定的 IP 地址?”。简短的回答可能是,在现代世界中,这些都不重要,因为无论如何每个人都会一直进行 DNS 查找。
不过,我认识到 /etc/hosts 仍然有很多用处。出于习惯,我倾向于选择选项 4,因为它看起来最简单。但是现在我看了一下,选项 3 之类的东西似乎最正确。如果您没有 DNS,则需要回答两个基本问题:
- 本地机器名映射到哪个 IP 地址?
- localhost 映射到哪个 IP 地址?
如果您没有 DNS 并且完全依赖 /etc/hosts,那么您可能也不关心 fqdn。在这种情况下,选项 3 允许您的机器使用环回 IP 地址回答问题 1 和问题 2,您可以假设该 IP 地址始终处于活动状态并正常工作。我猜有可能机器的真实 IP 地址可能未在接口上配置,从而导致该网络路径失败。
因此,我的答案是选择 #3,虽然理由不充分,但它回答了基本问题,并且在面对不确定的网络配置时最为稳健。
这确实是那些看似简单但想得越久就越复杂的问题之一。