Apache-2.2

ServerName 和 ServerAlias 是如何工作的?

  • March 8, 2022

這是我需要進一步澄清的虛擬主機配置的以下部分:

<VirtualHost *:80>
 # Admin email, Server Name (domain name), and any aliases
 ServerAdmin example@example.com
 ServerName  141.29.495.999
 ServerAlias example.com
...

這是和範例配置,類似於我目前擁有的(我目前沒有域名)。

<VirtualHost *:80>- 允許在埠 80 上向可以聯繫此伺服器的 IP 發出的所有 HTTP 請求進行以下設置。例如,如果可以在多個 IP 上訪問伺服器,則可以將此指令限制為僅一個而不是兩個。

ServerName- 如果 HTTP 請求的主機部分與此名稱匹配,則允許該請求。通常這將是映射到 IP 的域名,但在這種情況下,HTTP 請求主機必須與此 IP 匹配。

ServerAlias- 伺服器接受的備用名稱。

對我來說令人困惑的部分是,在上述情況下,如果我設置ServerAlias mytestname.com然後向 發出 HTTP 請求mytestname.com,是否必須有一個指向伺服器 IP 的 DNS 記錄才能正常工作?在這種情況下,ServerAlias 基本上只是 EXTRA ServerName 條目嗎?

假設我有一個 DNS 條目,foobar.com = 141.29.495.999但後來我有ServerName = 141.29.495.999並且ServerAlias是空的,這是否意味著儘管 foobar.com 被解析到正確的 IP,因為在ServerNameor中沒有接受 foobar.com 的引用ServerAlias

或者其他的東西。伙計,我很困惑。

可以這樣想:

DNS 是電話目錄/黃頁。當有人想撥打您的電話時,他們可以查找您的姓名並獲取您的電話號碼並撥打該電話。DNS 的作用與電腦相同——當有人想訪問時,www.example.com他們向 DNS 詢問 IP 地址,然後他們可以聯繫具有該 IP 地址的電腦。這就是決心的意思。解析 IP 地址與 Apache 無關;這嚴格來說是一個 DNS 問題。

ServerNameandServerAlias更像是一個公司的內部電話列表。您的網路伺服器就是總機;它將接受到伺服器的所有傳入連接。然後客戶端/呼叫者將告訴他們他們正在尋找什麼名稱,它會在 Apache 配置中查找如何處理該名稱。

如果該名稱未在 apache 配置中列為 ServerName/ServerAlias,則 apache 將始終為它們提供列出的第一個 VirtualHost。或者,如果根本沒有 VirtualHost,那麼無論請求中給出什麼主機名,它都會給出相同的內容。

ETA:所以,一步一步進行正常連接:

  1. http://www.example.com在瀏覽器中輸入。
  2. 您的電腦詢問它的 DNS 解析器,當它想與之交談時應該使用哪個 IP 地址www.example.com
  3. 您的電腦連接到該 IP 地址,並說它想與之交談www.example.com(這是Host:HTTP 中的標頭)。
  4. 網路伺服器查看其配置以確定如何處理來自www.example.com. 可能發生以下任何一種情況:
  • www.example.com被列為 aServerNameServerAliasfor a VirtualHost- 如果是這樣,那麼它將使用該 VirtualHost 的配置來傳遞內容。
  • 伺服器根本沒有任何虛擬主機 - 如果有,那麼它將使用其 httpd.conf 中的配置來傳遞內容。
  • 伺服器具有 VirtualHosts 但未www.example.com在其中任何一個中列出 - 如果是這樣,則列表中的第一個 Virtualhost 將用於傳遞內容。

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