0.0.0.0,127.0.0.1和localhost有什么区别?

时间:2013-12-26 03:33:41

标签: ip jekyll

我在我的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),因为我在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 之间的区别吗?任何人都可以解释为什么差异会导致这个问题

2 个答案:

答案 0 :(得分:339)

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

"本地主机"通常是127.0.0.1 IP地址的主机名。它通常设置在/etc/hosts(或等效的Windows名称" hosts" %WINDIR%下的某个地方)。您可以像使用任何其他主机名一样使用它 - 尝试" ping localhost"看看它如何解析为127.0.0.1

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

希望能回答你问题的知识产权方面。我不熟悉Jekyll或Vagrant,但我猜测您的端口转发8080 => 4000以某种方式绑定到特定的网络适配器,因此当您连接时它不在路径中本地到127.0.0.1

答案 1 :(得分:12)

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

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

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

jekyll serve --host 0.0.0.0

这会将您的应用程序绑定到主机&接下来使用以下来从其他主机

连接到它
http://host's IP adress/4000