我在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 將帶您前往預設虛擬主機,在本例中,預設虛擬主機似乎未定義。
我希望這有幫助。