我在运行 Amazon Linux 的 Amazon AWS EC2 上,尽管这对答案可能并不重要。
假设我有三台主机,H1、H2、H3,其私有 IP 地址分别为 10.0.0.1、10.0.0.2 和 10.0.0.3。这可以在 /etc/hosts 文件中用以下行表示:
127.0.0.1 localhost localhost.localdomain
10.0.0.1 H1
10.0.0.2 H2
10.0.0.3 H3
在 php 代码中,我会根据对主机提供内容的隐性了解,运行 curl 来访问特定主机上的内容。我宁愿不关心我访问的特定主机是否是运行代码本身的主机,而只是访问 H1、H2 或 H3。我可以在每台主机上使用不同的 /etc/hosts 文件,将其私有 IP 地址的行更改为使用地址 127.0.0.1。但这真的很重要吗?如果我在所有机器上使用相同的 /etc/hosts 文件,是否会牺牲任何性能或功能?
对计算机自己的私有 IP 地址进行的网络访问是否真的会导致真正的“外部”流量,还是会被检测到并使用环回连接器(如 127.0.0.1)?接收请求的进程是否将原始地址视为计算机自己的私有 IP 地址,还是无论如何都会看到 127.0.0.1?
答案1
使用相同的hosts
文件是可以的,并且不会对性能产生影响,如果您H1
从连接到 ,流量将保持本地H1
。但是,如果您连接到localhost/127.0.0.1
,源 IP127.0.0.1
也将是 ,但如果您连接到H1
,源 IP 将是10.0.0.1
(例如在 Apache 日志中)。
一个区别是:某些应用程序(尤其是 MySQL/MariaDB)在连接到 时会切换到使用 Unix 域套接字进行通信localhost
,但在使用 时使用 IP 堆栈127.0.0.1
或机器的实际 IP 地址或主机名。据说这会带来轻微的性能优势,但我从未对此进行过基准测试。