Domain-Name-System

無法通過 IP 地址訪問我的 GitHub Pages 網站

  • April 16, 2014

我的自定義域適用於 GitHub Pages,但我想了解它的實際工作原理。

對於這個例子,我根本沒有使用我的自定義域。我的 GitHub Pages 儲存庫不包含 CNAME 文件。


CNAME例如,給定一個沒有文件的 GitHub Pages 儲存庫:example.github.io

example.github.io解析為的 DNS 請求185.31.16.133

執行ping命令 forexample.github.io也會返回相同的 IP 地址:185.31.16.133

當我http://example.github.io在瀏覽器中打開網站時,瀏覽器會顯示實際網站的內容。

當我輸入 IP 地址185.31.16.133或使用 Postman 等工具發出 HTTP GET 請求時,我看到的只是 GitHub Pages 404 錯誤。

為什麼我不能通過 IP 地址直接訪問我的 GitHub 使用者頁面?我認為瀏覽器在發出 HTTP 請求之前,會用 DNS 查找的 IP 地址響應替換 URL 的主機名部分。

是的,網路瀏覽器會進行 DNS 查找並使用該 IP 地址進行連接。它們還採用原始主機名並將其作為 Host http 標頭的一部分發送。這允許 Web 伺服器從同一個 IP 地址為多個網站提供服務。

curl http://185.31.16.133/

對比

curl --header "Host: jzelenkov.github.io" http://185.31.16.133/

我認為您的網站不是該 ip 上唯一的網站,即使 github 上的每個項目都有一個唯一的 ip。在該伺服器上可能配置了數百個 github 使用者站點。

並且可能它們是使用虛擬主機結構配置的。在這種情況下,apache 伺服器有許多條目,格式如下:

   <VirtualHost *:80>
   DocumentRoot "/blablabla"
   ServerName example.gihub.io

  <Directory "/blablabla">
     ....
  </Directory>

  </VirtualHost>

您使用的 ip 只是託管您網站的伺服器的 ip。這麼多網站共享同一個ip。

這就是為什麼您無法直接訪問您的頁面的原因。並且可能他們為所有不使用有效虛擬主機的請求設置了 404 錯誤。這就是您收到 404 not found 錯誤的原因。

要使用 ip 直接訪問頁面,請參閱 andol 答案,使用 curl –header 等。

引用自:https://serverfault.com/questions/589370