我在运行 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?
使用相同的
hosts
文件很好,不会对性能产生影响,如果您连接到H1
from ,流量将保持在本地H1
。但是,如果您连接到localhost/127.0.0.1
,源 IP 也将是127.0.0.1
,但如果您连接到H1
,则源 IP 将是10.0.0.1
(例如在 Apache 日志中)。一个区别:一些应用程序,特别是 MySQL/MariaDB,如果您连接到 ,则切换到使用 Unix 域套接字进行流量
localhost
,但在使用时使用 IP 堆栈127.0.0.1
或机器的实际 IP 地址或主机名。据说这对性能有一点好处,尽管我从未真正对此进行过基准测试。