ServerName 和 ServerAlias 是如何工作的?
這是我需要進一步澄清的虛擬主機配置的以下部分:
<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,因為在ServerName
or中沒有接受 foobar.com 的引用ServerAlias
?或者其他的東西。伙計,我很困惑。
可以這樣想:
DNS 是電話目錄/黃頁。當有人想撥打您的電話時,他們可以查找您的姓名並獲取您的電話號碼並撥打該電話。DNS 的作用與電腦相同——當有人想訪問時,
www.example.com
他們向 DNS 詢問 IP 地址,然後他們可以聯繫具有該 IP 地址的電腦。這就是決心的意思。解析 IP 地址與 Apache 無關;這嚴格來說是一個 DNS 問題。
ServerName
andServerAlias
更像是一個公司的內部電話列表。您的網路伺服器就是總機;它將接受到伺服器的所有傳入連接。然後客戶端/呼叫者將告訴他們他們正在尋找什麼名稱,它會在 Apache 配置中查找如何處理該名稱。如果該名稱未在 apache 配置中列為 ServerName/ServerAlias,則 apache 將始終為它們提供列出的第一個 VirtualHost。或者,如果根本沒有 VirtualHost,那麼無論請求中給出什麼主機名,它都會給出相同的內容。
ETA:所以,一步一步進行正常連接:
- 你
http://www.example.com
在瀏覽器中輸入。- 您的電腦詢問它的 DNS 解析器,當它想與之交談時應該使用哪個 IP 地址
www.example.com
。- 您的電腦連接到該 IP 地址,並說它想與之交談
www.example.com
(這是Host:
HTTP 中的標頭)。- 網路伺服器查看其配置以確定如何處理來自
www.example.com
. 可能發生以下任何一種情況:
www.example.com
被列為 aServerName
或ServerAlias
for aVirtualHost
- 如果是這樣,那麼它將使用該 VirtualHost 的配置來傳遞內容。- 伺服器根本沒有任何虛擬主機 - 如果有,那麼它將使用其 httpd.conf 中的配置來傳遞內容。
- 伺服器具有 VirtualHosts 但未
www.example.com
在其中任何一個中列出 - 如果是這樣,則列表中的第一個 Virtualhost 將用於傳遞內容。