Apache-Httpd

Apache 網路伺服器如何檢測 CNAME

  • May 3, 2021

我很好奇即使所有子域都指向同一個 IP 地址,Apache Web 伺服器如何檢測子域,因為我的理解是一個 IP 地址不能有一個子域,並且每個域名最終都會解析為一個 IP 地址。

例子:

example1.domain.com resolves to => 192.24.17.65 take you to => example1 webpage

example2.domain.com resolves to => 192.24.17.65 take you to => example2 webpage

確實,在網路的早期,通過一個 IP 託管多個網站(不同的域、單個域的子域等)是不可行的。

然而,在 1999 年,開始向 HTTP 1.1 過渡,而今天 HTTP 1.0 已很少使用(實際上 HTTP 2 已經普及,但 1.1 仍然很常見)。

HTTP 1.1 請求包含一個 Host: 標頭,它允許瀏覽器指定它嘗試訪問的域。

您可以使用 curl 輕鬆查看此內容,使用詳細標誌查看您發送的請求:

# curl -Iv http://google.com/
*   Trying 2a00:1450:4025:402::64:80...
* TCP_NODELAY set
* Connected to google.com (2a00:1450:4025:402::64) port 80 (#0)
> HEAD / HTTP/1.1
> Host: google.com
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently

遷移到加密網站(HTTPS,使用 SSL/TLS)使事情變得複雜,因為加密握手必須在發送 HTTP 其餘部分(包括 Host: 標頭)之前發生,但是從同一 IP 託管的多個站點可能使用不同的加密證書。

目前的解決方案是 SNI(伺服器名稱指示),它是 TLS 的擴展,在概念上類似於 Host 標頭:請求瀏覽器在連接嘗試的早期將它嘗試連接的域發送到伺服器,以便伺服器可以正確完成加密握手。

引用自:https://unix.stackexchange.com/questions/647768