/ etc / hosts是否应包含“ 127.0.0.1 localhost myhost.example.org myhost”之类的条目?


16

在查看各种Linux和FreeBSD系统时,我注意到在某些系统上/etc/hosts包含主机公共主机名的条目,而在其他系统上则没有。

这里的最佳做法是什么?我的/ etc / hosts文件是否应该包含主机FQDN(例如myhost.example.org)和短主机名(例如myhost)的条目?FQDN的记录应该指向本地主机还是应该指向盒子的外部IP?

例如,许多RHEL / EL盒上的默认配置不会将公共主机名放入/etc/hosts

myhost # cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
myhost #

另一个变体是主机的短主机名和FQDN也指向127.0.0.1。有人告诉我,这是一种较老的做法,如今已不为人所知,但是许多管理员仍然这样做。

myhost # cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 myhost myhost.example.org
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
myhost #    

第三个变体是为主机的FQDN和简短主机名指定了主机的外部IP地址。第三个变量对我来说似乎是最佳选择,因为它减少了对DNS服务器的查找。

myhost # cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
74.125.239.xxx myhost myhost.example.org
myhost #  

这里的最佳做法是什么?


2
它归结为程序使用的别名(对于以前的Mysql喜欢/需要具有“ localhost”别名),127.0.0.1 localhost myhost应该足够了,74.125.239.xxx myhost myhost.example.org正如您所说的,可以节省DNS查找。除非有标准,否则“最佳实践”是“知识渊博的人使用的”。
LinuxDevOps 2014年

Answers:


12

您是否愿意接受可以正常工作的DNS,这是您环境中的失败点。如果系统无法解析本地计算机的名称,则某些服务/应用程序在某些配置中将失败。

如果您拥有在所有情况下都必须运行的绝对关键服务,那么在hosts文件中添加一个条目以使该服务可以在DNS解析失败的情况下继续运行是很正常的。

如果您可以接受DNS作为失败点,或者如果服务在解析失败的情况下不会失败,则可以避免hosts文件中的配置条目。

我强烈建议您使DNS服务器尽可能坚如磐石,如果必须配置主机文件,请使用配置管理系统来完成。您确实应该避免手动避免触摸主机文件。


13
补充说明一下,在大多数情况下,/etc/hostsDNS将取代DNS,如果DNS故障,则不会用作备用。我认为这是一个区别。(不尝试nit-pick。)这完全取决于中定义的顺序/etc/nsswitch.conf
亚伦·科普利2014年

4
另一个问题是查询DNS服务器要比查询/etc/hosts文件慢得多。许多应用程序每秒多次查询其主机名。将主机名添加到主机/etc/hosts名将减少延迟,并应加快应用程序的速度。
Stefan Lasiewski 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.