我即将设置一个新的 Ubuntu 10.04 服务器,它将充当 Web 服务器。该服务器将托管几个域,包括几个子域。'/etc/hosts' 是否需要包含所有域和子域,还是仅让它包含标准 localhost 行和公共 IP 地址行(如下所示)就足够了?
127.0.0.1 localhost web00.example.com
173.203.99.130 web00.example.com web00
我推测没有“/etc/hosts”来列出 Web 服务器托管的域的后果是 DNS 查找无法在内部完成而必须交给外部 DNS 服务器?
答案1
我有许多服务器托管多个网站,但从未设置 /etc/hosts 来包含托管的域。如果您的网站确实大量引用自身,则通过否定 DNS 查找可能会获得一些性能。但这对我来说从来都不是问题,而且这绝对不是必需的,但可能不是一个坏主意。
如果您设置 /etc/hosts 以将域指向 127.0.0.1,那么您还可以解决 127.0.0.1 流量连接到公共接口的任何潜在防火墙问题,但当然必须设置虚拟主机以监听 127.0.0.1 才能使其正常工作。
答案2
它必须存在/etc/hosts除非你想将其交给外部DNS服务器。
答案3
'/etc/hosts' 是否需要包含服务器托管的所有域?
不。只有当您测试您的 Web 服务器本身时才需要这样做。
答案4
我知道其他人已经回答了,并且答案已被接受。但是,由于 OP 听起来很新,因此应该提到一些陷阱。
/etc/hosts 只是解析器信息的一个来源。网络 DNS 服务是另一个。还有更多可能性,而解析如何进行则取决于您的 nsswitch 设置。因此,您必须在解析需求与维护成本之间取得平衡。(例如,您的 Web 服务器是否需要解析主机名来确定在启动时要绑定哪个 IP 地址?如果是这样,并且 DNS 已关闭,则您的 Web 启动将失败。也许您可以调整 Web 配置以不依赖 DNS。那么其他需要解析名称的服务呢?等等。欢迎来到系统管理。)
在 /etc/hosts 中放入大量条目很繁琐,但很稳定(因为它不依赖于 DNS 运行)。因此,有些管理员会将系统所需的所有东西都放入 /etc/hosts 中。有些管理员使用巨大的 /etc/hosts 文件,并使用 Puppet 等进行管理,根本不依赖 DNS。这就是 Sun 的旧“黄页”(yp)文件的作用所在,通过 YP 共享一个包含解析器信息的中央文件。