[英]What is the difference between 0.0.0.0, 127.0.0.1 and localhost?
我在我的 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)需要訪問 Internet。 我無法在沒有 Internet 的情況下運行Jekyll server
。 這是一個小錯誤嗎?
我也使用Vagrant
。 我在 Vagrantfile 中設置了端口轉發(8080 => 4000),因為我在Vagrant
虛擬機中安裝了Jekyll
並在 Macintosh 下測試它。 如果我使用默認設置(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 和 localhost 之間的區別? 誰能解釋為什么差異會導致這個問題?
127.0.0.1
通常是分配給“環回”或僅限本地接口的 IP 地址。 這是一個“假”網絡適配器,只能在同一主機內通信。 當您希望支持網絡的應用程序僅為同一主機上的客戶端提供服務時,通常會使用它。 在127.0.0.1
上偵聽連接的進程將只接收該套接字上的本地連接。
“localhost”通常是127.0.0.1
IP 地址的主機名。 它通常設置在/etc/hosts
中(或在%WINDIR%
下某處名為“hosts”的 Windows 等效項)。 您可以像使用任何其他主機名一樣使用它 - 嘗試“ping localhost”以查看它如何解析為127.0.0.1
。
0.0.0.0
有幾個不同的含義,但在這種情況下,當服務器被告知監聽0.0.0.0
時,這意味着“監聽每個可用的網絡接口”。 從服務器進程的角度來看,IP 地址為127.0.0.1
的環回適配器看起來就像機器上的任何其他網絡適配器一樣,因此被告知偵聽0.0.0.0
的服務器也將接受該接口上的連接。
希望這能回答您問題的 IP 方面。 我不熟悉 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),以便希望 Internet 上的任何人都可以訪問它。
如果您的 Nginx Web 服務器監聽 127.0.0.1:80,那么除了您登錄此服務器之外,沒有人可以訪問它。
如果網絡服務器監聽 0.0.0.0:80,互聯網上的任何人都可以通過在瀏覽器中輸入您的服務器 IP 地址來連接到您的服務器。
請注意,除了端口 80 之外,還可以監聽任何端口。 我在這個例子中選擇了 80,因為這是 Web 服務器的默認端口,並且瀏覽器不會強制用戶在輸入 IP 地址后鍵入它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.