0.0.0.0,127.0.0.1和localhost有什么不同?

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

我也使用Vagrant 。 我已经在Vagrantfile中设置了端口转发(8080 => 4000),因为我在Vagrant虚拟机中安装了Jekyll并在Macintosh下进行了testing。 如果我使用默认设置(0.0.0.0:4000),它可以工作。 我可以通过http://localhost:8080从我的Safari浏览器访问它。 但是,如果没有互联网,我不能绑定到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和本地主机之间的区别 ? 任何人都可以解释为什么差异会导致这个问题

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

“localhost”通常是127.0.0.1 IP地址的主机名。 它通常设置在/etc/hosts (或者在%WINDIR%下的某个地方命名为“hosts”)。 您可以像使用其他主机名一样使用它 – 尝试“ping localhost”以查看它是如何parsing为127.0.0.1

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

这有希望回答你的问题的IP方面。 我不熟悉Jekyll或Vagrant,但我猜你的端口转发8080 => 4000是以某种方式绑定到一个特定的networking适配器,所以它不是在本地连接到127.0.0.1path

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

但是,可能会发生这样的情况:您想要查看您的应用程序在移动设备上或其他笔记本电脑上运行的方式。

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

 jekyll serve --host 0.0.0.0 

这将您的应用程序绑定到主机和下一个使用从其他主机连接到它

 http://host's IP adress/4000