0.0.0.0、127.0.0.1 和 localhost 有什么区别?

问题描述 投票:0回答:3

我在 Mac 上使用

Jekyll
Vagrant
。我发现
Jekyll server
将绑定到
0.0.0.0:4000
而不是
127.0.0.1:4000
。另外
gem server
将默认绑定到该地址。我仍然可以通过
http://localhost:port
访问它。但对于
Jekyll
似乎默认设置(例如0.0.0.0:4000)需要互联网访问。如果没有互联网,我无法运行
Jekyll server
这是一个小错误吗?

我也用

Vagrant
。我在 Vagrantfile 中设置了端口转发(8080 => 4000),因为我在
Jekyll
虚拟机中安装了
Vagrant
并在 Macintosh 下测试它。如果我使用默认设置(0.0.0.0:4000),它就可以工作。我可以通过
http://localhost:8080
从我的狩猎之旅中访问它。但如果没有互联网,我无法绑定到 0.0.0.0:4000。我使用
jekyll server -H 127.0.0.1
将服务绑定到
127.0.0.1:4000
,然后我无法通过
http://localhost:8080
访问它。

任何人都可以解释 0.0.0.0、127.0.0.1 和 localhost 之间的区别?任何人都可以解释为什么差异会导致这个问题

ip jekyll
3个回答
660
投票

127.0.0.1
通常是分配给“环回”或仅限本地接口的 IP 地址。这是一个“假”网络适配器,只能在同一主机内通信。当您希望支持网络的应用程序仅为同一主机上的客户端提供服务时,通常会使用它。正在侦听
127.0.0.1
连接的进程将仅接收该套接字上的本地连接。

“localhost”通常是

127.0.0.1
IP 地址的主机名。它通常在
/etc/hosts
中设置(或者 Windows 等效名称“hosts”,通常位于
C:\Windows\System32\Drivers\etc\hosts
)。您可以像任何其他主机名一样使用它 - 尝试“ping localhost”以查看它如何解析为
127.0.0.1

0.0.0.0
有几个不同的含义,但在这种情况下,当服务器被告知侦听
0.0.0.0
时,这意味着“侦听每个可用的网络接口”。从服务器进程的角度来看,具有 IP 地址
127.0.0.1
的环回适配器看起来就像计算机上的任何其他网络适配器一样,因此被告知侦听
0.0.0.0
的服务器也将接受该接口上的连接。

这有望回答您问题的知识产权方面。我不熟悉 Jekyll 或 Vagrant,但我猜测您的端口转发

8080 => 4000
以某种方式绑定到特定的网络适配器,因此当您本地连接到
127.0.0.1

时,它不在路径中

38
投票

在当前版本的 Jekyll 中,默认为 http://127.0.0.1:4000/
如果您已连接到网络但不希望其他人访问您的应用程序,那么这很好。

但是,您可能想查看您的应用程序如何在移动设备或其他笔记本电脑/计算机上运行。

在这种情况下,你可以使用

jekyll serve --host 0.0.0.0

这会将您的应用程序绑定到主机,然后使用以下命令从其他主机连接到它

http://host's IP adress/4000 

27
投票

我将通过示例解释 127.0.0.1 和 0.0.0.0 的区别:

想象一下,您在远程计算机上运行任何 Web 服务器(例如 Nginx),以便您希望互联网上的任何人都可以访问它。

如果你的 Nginx Web 服务器监听 127.0.0.1:80 那么除了你登录该服务器之外没有人可以访问它。

如果 Web 服务器监听 0.0.0.0:80,互联网上的任何人都可以通过在浏览器中输入您的服务器 IP 地址来连接到您的服务器。

请注意,可以监听任何端口,而不是端口 80。我在这个例子中使用了 80,因为这是 Web 服务器的默认端口,并且浏览器不会强制用户在输入 IP 地址后输入它。

© www.soinside.com 2019 - 2024. All rights reserved.