我在我的mac上使用Jekyll和Vagrant。我发现Jekyll服务器将绑定到0.0.0.0:4000而不是127.0.0.1:4000。此外,宝石服务器将绑定到这个地址默认。我仍然可以通过http://localhost:port访问它。但对于Jekyll,似乎默认设置(例如0.0.0.0:4000)需要Internet访问。没有网络我无法运行Jekyll服务器。是小虫子吗?

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

有人能解释一下0.0.0.0,127.0.0.1和localhost之间的区别吗?有人能解释一下为什么这种差异会导致这个问题吗?


当前回答

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

"localhost"通常是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的服务器也将接受该接口上的连接。

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

其他回答

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

"localhost"通常是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的服务器也将接受该接口上的连接。

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

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

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

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

jekyll serve --host 0.0.0.0

这将您的应用程序绑定到主机&下次使用后,从其他主机连接到它

http://host's IP adress/4000 

我将举例解释127.0.0.1和0.0.0.0的区别:

想象一下,你在一台远程机器上运行任何web服务器(例如Nginx),这样你就想让互联网上的任何人都能访问它。

如果你的Nginx web服务器监听127.0.0.1:80,那么除了你登录到这个服务器上,没有人可以访问它。

当web服务器监听0.0.0.0:80时,Internet上的任何人都能够通过在浏览器中输入您的服务器IP地址连接到您的服务器。

注意,监听的不是80端口,而是任何端口。我以80为例,因为这是web服务器的默认端口,浏览器在输入IP地址后不会强制用户输入。