6

有一个 nginx 服务器在 8080 端口上侦听,并使用 localhost 和 127.0.0.1 进行远程登录。一个连接,一个连接失败,否则失败。

[test@localhost sbin]$ telnet localhost 8080          
Trying ::1...
telnet: connect to address ::1: Connection refused

[test@localhost sbin]$ telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

'localhost' 和 '127.0.0.1' 有什么区别?为什么 localhost 连接失败?谢谢!

4

4 回答 4

8

127.0.0.1是本地机器的 IPv4 地址。

localhost是查找本地计算机地址的名称。在您的情况下,它首先找到 IPv6 地址 (::1) 并尝试连接到该地址。如果您的服务仅侦听 IPv4,它将无法连接。

于 2013-05-05T09:07:10.383 回答
0

localhost 是 ip 地址 127.0.0.1 的命名地址 无法记住 ip 地址,这就是计算机使用 dns 表示域名系统 (DNS) 的原因。它将命名转换为 ip 地址以及反向。解释域名系统的一个常用类比是,它通过将人类友好的计算机主机名转换为 IP 地址来充当 Internet 的电话簿。例如,域名 www.example.com 转换为地址 93.184.216.119 (IPv4) 和 2606:2800:220:6d:26bf:1447:1097:aa7 (IPv6)。

于 2013-12-14T10:18:30.097 回答
0

似乎 localhost 绑定到 ipv6 并且您没有在 ::1 ipv6 IP 上监听。

于 2013-05-05T09:07:19.523 回答
0

主机名可以解析为 IPv4 和 IPv6 地址。"localhost" resolves to IPv4 (127.0.0.1) and IPv6 [::1].

(from Trying ::1...)对于这个用例,localhost 会找到导致连接失败的 IPv6 地址,因为您的服务正在列出到 IPv4

我认为 Windows 的偏好是尽可能使用 IPv6,这就是 localhost 默认为 IPv6 分辨率的原因。如果您关闭 IPv6,它将转到 IPv4 地址。

除此之外,原因是许多 ISP 不向客户提供 IPv6 地址(并​​且许多路由器/调制解调器无法处理它们),并且如果您想使用 IPv6 访问服务器,则需要链中的所有设备都使用 IPv6 IPv6。

于 2019-06-20T03:53:07.433 回答