為什麼我的部落格無法透過ip位址存取?

為什麼我的部落格無法透過ip位址存取?

我在wisdom.host22.com/wp上建立了wordpress,可以wisdom.host22.com/wp在firefox中存取它。

在此輸入影像描述

ping wisdom.host22.com
PING wisdom.host22.com (31.170.160.189) 56(84) bytes of data.
64 bytes from 31.170.160.189: icmp_seq=1 ttl=46 time=307 ms

從 ping 的結果來看,該網域的 ip 位址是 31.170.160.189。

在firefox中輸入31.170.160.189/wp無法訪問,為什麼?在firefox中輸入時31.170.160.189/wp,url會跳到 http://error404.000webhost.com/,why?

在此輸入影像描述

答案1

您的 WordPress 應用程式可能是託管於 的眾多網站之一host22.com

有一個網頁伺服器監聽 IP31.170.160.189並為您的頁面和所有其他頁面提供服務。

如果直接透過IP查詢伺服器,它如何知道要服務哪個網站?該 IP 不完全屬於您的子網域。結果,您將被重新導向到一個404 NOT FOUND頁面。

當透過正確的主機名稱(例如 )查詢它時wisdom.host22.com,它知道要做什麼,因為主機名稱是瀏覽器發出的 HTTP 請求的一部分。根據請求標頭提供內容是一種常見技術,通常稱為「虛擬主機」。這樣,網頁伺服器就可以從相同 IP 位址提供許多不同的網站。

您可以從命令列嘗試行為的差異

/wp首先,讓我們從網頁伺服器請求資源並將其 IP 位址傳送為Host

$ echo -e "GET /wp/ HTTP/1.1\nHost: 31.170.160.189\n" | netcat 31.170.160.189 80
HTTP/1.1 302 Found
Date: Sun, 11 Oct 2015 09:05:30 GMT
Server: Apache
Location: http://error404.000webhost.com/?
Content-Length: 216
Connection: close
Content-Type: text/html; charset=iso-8859-1

正如預期的那樣,伺服器透過提供404頁面來回應。

現在執行相同的操作,但Host正確設定為您的子網域

$ echo -e "GET /wp/ HTTP/1.1\nHost: wisdom.host22.com\n" | netcat 31.170.160.189 80
HTTP/1.1 200 OK
Date: Sun, 11 Oct 2015 09:08:50 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
X-Pingback: http://wisdom.host22.com/wp/xmlrpc.php
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

這次,伺服器可以遵守(狀態代碼200 OK)並為您的 WordPress 主頁提供服務。

netcat命令在連接埠 80 上開啟與伺服器的連線echo。 HTTP 是一種明文協定。您只需與伺服器“交談”即可。

答案2

當您向伺服器發送 HTTP 請求時,其中包含一個主機行,當 apache 收到此請求時,它將其傳送至為該位址定義的任何虛擬主機,如下所述:

https://serversforhackers.com/configuring-apache-virtual-hosts

因此,如果在您建立的伺服器中有一個wisdom.host22.com 的虛擬主機,則輸入主機名稱將帶您前往那裡,但輸入ip 將帶您前往預設虛擬主機,在本例中,預設虛擬主機似乎未定義。

我希望這有幫助。

相關內容