主机名parsing到哪个IP?

主机名machine.example.com应该在/etc/hostsparsing哪个IP?

  • 到本地主机(127.0.0.X),
  • 到本地networking(10.XXX或192.168.XX),
  • 或从外部可见的外部服务器IP(XXXX)?

这一切都取决于你的需求!

在正常情况下,我会build议使用导致最小努力的IP。 例如:

127.0.0.1将导致stream量只能在TCP堆栈中移动。

如果你把你的局域网地址,潜在的stream量可能会从你的networking发送出去,然后由你的路由器/交换机返回。

如果您input公共IP地址,stream量可能会通过您的路由器离开您的networking,然后从您的ISP返回到您的路由器,然后返回到您的networking。

事实上,各种各样的工具箱应该足够聪明,不会让事情变得如此遥远,但他们可能会做到。

另一方面,如果一台机器能够像自己的公共服务器一样能够联系自己,但是根据我的经验,这仅仅是为了开发的目的,例如一个用于web dev的基本LAMP堆栈具有DB与networking服务器相同的机器,但在生产情况下,它将是单独的。 通过使其与非本地主机的IP进行通信,确保所有的行为更像生产环境,这是一件好事。

由于您的机器具有公共IP,所以将主机名指向它是很好的。

一般来说,我同意@BParker的情况是,每种方法都比较有用,并且通常使其成为本地主机别名将是对某种testing环境进行最有效的资源利用。

不过,我也想build议最可pipe理的解决scheme是根本没有这个条目,并依赖于DNS。 除非你configuration你的DNS来做本地回复的特殊技巧,否则这通常会给你一个机器的世界路由地址,但是它可以让你灵活地pipe理networking服务,而不用在每台机器上寻找stream氓条目。 如果您的服务连接到machine.domain.comservice.domain.com名称的最佳位置,则可以更改托pipe服务的位置并移动计算机,而无需对软件进行重新编程,也不必对分散的/etc/hosts文件。

这曾被写在一些Linux发行版的hosts文件的顶部:

 # By the way, Arnt Gulbrandsen <[email protected]> says that 127.0.0.1 # should NEVER be named with the name of the machine. It causes problems # for some (stupid) programs, irc and reputedly talk. :^) 

IP地址是真正绑定到接口的,而不是机器,所以根据理论,每个接口应该有一个不同的名称 – 使用私有域或子域来放置内部地址。

任何一个半象样的networking堆栈都会将本地接口上configuration的地址识别为一个地址,并在数据包冲击networking接口驱动程序之前将数据包环回,更不用说networking本身了。 127.0.0.1应该不会更快。 如果您不确定,请ping 127.0.0.1,然后您的本地地址,并比较RTT。 在我的系统上,它们同样快,比ping本地网关要快一个数量级。

常识:

如果你有一个外部域,本地或本地networking有什么好处呢? 没有。

即使在内部,如果我inputmachine.example.com我不是在localhost有兴趣。