伺服器只保存一個網站嗎?

伺服器只保存一個網站嗎?

據我了解,DNS將網域名稱與儲存網站的伺服器的IP位址連結起來,這是否意味著每台伺服器只能容納一個網站?如果沒有,如果同一台伺服器上有很多網站,呼叫伺服器的IP位址如何知道我想要哪個網站?

答案1

基本上:瀏覽器在 HTTP 請求中包含域名,因此網頁伺服器知道請求的是哪個域並且可以做出相應的回應。


HTTP 請求

以下是典型 HTTP 請求的發生方式:

  1. 使用者提供一個 URL,格式為http://host:port/path

  2. 瀏覽器提取 URL 的主機(網域)部分,並在必要時將其轉換為 IP 位址,此過程稱為名稱解析。這種轉換可以透過 DNS 進行,但並非必須如此(例如,hosts常見作業系統上的本機檔案繞過 DNS)。

  3. 瀏覽器開啟到該 IP 位址上指定連接埠的 TCP 連接,或預設為連接埠 80。

  4. 瀏覽器會傳送 HTTP 請求。對於 HTTP/1.1,它看起來像這樣:

    GET /path HTTP/1.1
    Host: example.com
    

    (該Host標頭是標準的,並且是 HTTP/1.1 中必需的。HTTP/1.0 規範中未指定該標頭,但有些伺服器還是支援它。)

從這裡開始,網頁伺服器可以使用幾個資訊來決定回應應該是什麼。請注意,單一 Web 伺服器可以綁定到多個 IP 位址。

  • 來自 TCP 套接字請求的 IP 位址
    • 客戶端的 IP 位址也是可用的,但這很少使用 - 有時用於阻止/過濾
  • 來自 TCP 套接字的請求端口
  • 請求的主機名,Host由瀏覽器在 HTTP 請求的標頭中指定。
  • 請求的路徑
  • 任何其他標頭(cookie 等)

正如您似乎已經注意到的那樣,當今最常見的共享託管設定將多個網站放在一個 IP 位址:連接埠組合上,僅Host用於區分網站。

這被稱為基於名稱的虛擬主機在 Apache 領域,而 Nginx 稱它們為伺服器區塊中的伺服器名稱並且 IIS 更喜歡虛擬伺服器


HTTPS 怎麼樣?

HTTPS 有點不同。在建立 TCP 連線之前一切都是相同的,但之後必須建立加密的 TLS 隧道。目標是不洩露有關請求的任何資訊。

為了驗證伺服器是否確實擁有該網域,伺服器必須傳送由受信任的第三方簽署的憑證。然後,瀏覽器會將此憑證與其要求的網域進行比較。

這提出了一個問題。如果伺服器需要在收到 HTTP 請求之前執行此操作,那麼伺服器如何知道要傳送哪個主機(網站)的憑證?

傳統上,這是透過為每個需要 HTTPS 的網站提供專用 IP 位址(或連接埠)來解決的。顯然,當我們開始用完 IPv4 位址時,這就會出現問題。

進入神經網路研究所(伺服器名稱指示)。瀏覽器現在在 TLS 協商期間傳遞主機名,因此伺服器可以儘早獲得此資訊以傳送正確的憑證。在伺服器端,配置與 HTTP 虛擬主機的配置方式非常相似。

缺點是主機名稱現在在加密之前以純文字形式傳遞,並且本質上是洩漏的資訊。考慮到主機名稱通常會在 DNS 查詢中公開,這通常被認為是可接受的權衡。


如果您僅透過 IP 位址請求網站怎麼辦?

當伺服器不知道您要求的特定主機時,它會做什麼取決於伺服器的實作和配置。通常,指定一個「預設」、「包羅萬象」或「後備」站點,它將為所有未明確指定主機的請求提供回應。

此預設站點可以是其自己的獨立站點(通常顯示錯誤訊息),也可以是伺服器上的任何其他站點,具體取決於伺服器管理員的首選項。

答案2

我對非技術人員有這樣的解釋。

傑克、吉兒和喬住在宿舍,他們沒有手機。

在電話簿中,它們都以相同的號碼列出。 (一個記錄)

你撥打號碼,有人接電話;你說“我想和吉爾通話”,然後讓她接通。

電話簿中可能沒有 A 記錄(電話號碼/IP 位址),而只是顯示“X 宿舍”,那麼您必須進一步查找 X 宿舍的號碼。

如果吉爾沒空,您可能會得到

  • 第404章 吉爾不在
  • 410 吉爾死了。
  • 第301章 吉爾搬去和彼得住在一起
  • 第302章 吉爾正在拜訪彼得,請打電話給他

  • 400 我聽不懂你的話。

  • 第401章 你是誰?密碼是什麼?或 晚上 10 點後我們不允許男性來電
  • 402 需要付款(你確定吉爾是她的真名嗎;-))
  • 403 不,這不是正確的密碼。
  • 第418章 吉爾是個茶壺:-)
  • 429 吉爾無法再接聽任何電話。
  • 451 您違反了限制令。

  • 500 我們的電話系統壞了。

答案3

據我了解,DNS將網域名稱與儲存網站的伺服器的IP位址連結起來,這是否意味著每台伺服器只能容納一個網站?

首先,您需要了解這裡有許多不同的概念。

  • 網站,形成一個連貫整體的一組網頁。
  • IP 位址,網際網路協定用作流量來源或目的地的數位位址(IPv4 為 32 位,IPv6 為 128 位元)。
  • 伺服器,其工作是服務客戶端請求的機器。
  • 主機名,用於在 DNS 中識別電腦的名稱(例如“www.example.com”或“en.wikipedia.org”)

這些事物之間不存在一對一的關係。一台伺服器可以有多個IP位址;多個主機名稱可以指向一個IP位址;一個主機名稱可以指向多個IP位址。多個網站可以位於同一主機名稱下。一個網站可以分佈在多個主機名稱上。

如果沒有,如果同一台伺服器上有很多網站,呼叫伺服器的IP位址如何知道我想要哪個網站?

在過去(HTTP 1.0 及之前),伺服器想要以不同方式處理的每個主機名稱都必須有自己的 IP 位址。這實在是太浪費了。

HTTP 1.1 新增了Host「標頭」作為HTTP 請求中的強製字段(IIRC 一些供應商之前支援將此作為擴展)。的內容現在,客戶端對 HTTP 1.1 的支援無所不在。

不幸的是,SSL(後來的 TLS)增加了一些問題。建立 SSL/TLS 會話需要伺服器向用戶端提供涵蓋所請求主機名稱的證書,但 HTTP 請求只有在建立 SSL/TLS 會話之後才會到達。

SubjectAltName透過使用該欄位或在該欄位中使用通配符,可以使一個憑證涵蓋多個主機名稱CommonName。然而,這帶來了管理挑戰,特別是當涉及的主機名稱位於不同所有權的域下時。

因此 TLS 引入了「伺服器名稱指示」(SNI)擴充。透過此擴展,客戶端在 TLS 握手過程中將請求的主機名稱傳送到伺服器。然後伺服器可以提供適當的憑證。不幸的是,雖然所有主要 SSL/TLS 實現的當前版本都支援 SNI,但舊版本花了很長時間才不再使用。

答案4

使用 DNS,您可以根據需要為單一 IP 位址分配任意數量的名稱(在您的主機檔案例如,您可以簡單地用空格分隔每個名稱)。使用 DNS 伺服器,您還可以將多個 IP 位址指派給一個名稱。它不限於一對一的關係。

Web 伺服器知道要為哪個站點提供服務檢查請求的 URL。它查看請求的網域、請求的連接埠以及使用的協定。這與 DNS 無關,由 HTTP 協定處理。

相關內容