什么会导致 Ubuntu Server 14.04 LTS 计算机在 Web 服务器配置中失去使用“localhost”的能力?如果我将“localhost”替换为计算机的静态内部 IP 地址 (192.168.0.70),则网络上的其他计算机可以访问该站点。如果我尝试使用“localhost”,则无法访问相同的请求(假设我使用的是http://192.168.0.70:8000两种情况都适用)。我已经使用 2 种不同的 Web 服务器技术复制了此问题,因此这不是 Web 服务器问题。'/etc/hosts' 文件包含 '127.0.0.1 localhost' 条目,我可以在相关机器上 ping 'localhost'。我运行了 ufw 防火墙并允许端口 8000 上的 tcp 流量。由于我可以使用 IP 配置从其他机器访问该站点,因此我知道这不是防火墙问题。
答案1
localhost 仅是环回。它是机器内部的、私有的,与任何其他机器上的 localhost 无关。如果您想在有线接口上提供服务,它必须在该接口上侦听。因此,您可以侦听该接口,或 *(全部),或者如果需要,可以侦听包含 localhost 的列表,以及有线接口。(在配置中,有时您输入一个 ip,有时您输入一个接口)
你也可以在 lsof 中看到它。这是一个监听所有内容的 Web 服务器:
root@webthingy # lsof -Pni | grep "TCP.*:80.*LISTEN"
apache2 26080 root 3u IPv4 450401823 0t0 TCP *:80 (LISTEN)
apache2 26485 www-data 3u IPv4 450401823 0t0 TCP *:80 (LISTEN)
这是一个监听一个列表而不是全部的 DNS 服务器(UDP 没有显示为 LISTEN,但这就是它们的含义):
root@dnsthingy:~ # lsof -Pni | grep named.*:53
named 13132 bind 20u IPv4 13389831 0t0 TCP 127.0.0.1:53 (LISTEN)
named 13132 bind 21u IPv4 13389833 0t0 TCP 10.2.0.2:53 (LISTEN)
named 13132 bind 512u IPv4 13389830 0t0 UDP 127.0.0.1:53
named 13132 bind 513u IPv4 13389832 0t0 UDP 10.2.0.2:53