Apache 默認虛擬主機

Apache 默認虛擬主機
Apache 默認虛擬主機

上一節中說到,在 /usr/local/apache2.4/htdocs/ 下面可以訪問到 1.php 和 index.html 這兩個文件,這是爲什麼呢?
輸入命令 vim /usr/local/apache2.4/conf/httpd.conf,搜索 /htdocs,回車,見下圖,
Apache 默認虛擬主機
上圖紅色框框的內容顯示,就是因爲參數 DocumentRoot 定義了網站的目錄在哪裏。接着搜索 /ServerName,回車,見下圖,
Apache 默認虛擬主機
上圖紅色框框的內容顯示,因爲參數 ServerName 定義了網站的域名,只不過這個 ServerName 可以用任何域名去訪問。
Windows 和 Linux 的 htdocs 基本上是相似的,所以這邊先演示一下,怎麼在Windows上寫htdocs,hosts 的文件路徑見下圖,
Apache 默認虛擬主機
右擊 hosts 文件,選擇打開方式,再選中記事本,點擊確定,進入見下圖,
Apache 默認虛擬主機
增加一行 IP 地址和域名,見下圖紅色框框,
Apache 默認虛擬主機
然後保存。保存這邊會有一些問題 ,需要管理員權限纔可以保存,這邊可以嘗試,複製一個文件到桌面上,然後進行上面的更改,再把原文件刪除掉,把桌面上的更改好的文件放進去。
完成之後,打開Windows的cmd,嘗試ping一下這兩個域名,見下圖,
Apache 默認虛擬主機
可以看到,IP 是192.168.218.128,沒錯了。正常情況下,不更改hosts文件的話,看到的就是下圖這種情況了,
Apache 默認虛擬主機
可以看到,IP 地址明顯就變成官網的 IP 了。
以上就是hosts這個文件的作用,可以訪問到指向的IP。這個情況在DNS還沒有生效的時候可以使用。
在 www.abc.com 域名指向 192.168.218.128 這個 IP 的時候,來訪問一下這個網站,見下圖,
Apache 默認虛擬主機
出現的也是“It works!”,接着訪問一下,www.abc.com/1.php ,回車,見下圖,
Apache 默認虛擬主機
包括 www.123.com/1.php ,也是一樣的,見下圖,
Apache 默認虛擬主機
上面操作的這兩個域名和IP地址,我們都沒有到配置文件裏去定義,僅僅只是定義了 ServerName www.example.com:80 這個域名,爲什麼都可以訪問?
Apache 默認虛擬主機
這個就叫做 apache 的默認主機,也就是說任何一個域名,只要指向了這個 IP,都會訪問到這個站點,這個站點就叫做默認虛擬主機。如果沒有做任何操作,僅僅使用的是 httpd.conf 配置文件裏面定義的這個 ServerName www.example.com:80 以及 DocumentRoot,
Apache 默認虛擬主機
這樣就會不太好管理,畢竟一臺服務器可以跑多個域名,不一定要指向到這邊。所以,我們需要打開一個虛擬主機的配置文件,輸入命令 vim /usr/local/apache2.4/conf/httpd.conf,搜索 /extra,回車,找到下圖,
Apache 默認虛擬主機
紅色框框裏面就是虛擬主機,把下面那行的#號去掉,保存並退出。也就是說,前面的 htdocs、DocumentRoot 和 ServerName 等全部不用了,因爲這一個配置文件裏面只能定義一個 ServerName,肯定是不合適的。
現在打開一個二級配置文件,就是虛擬主機的配置文件,在這個配置文件裏是可以定義多個 ServerName,輸入命令 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,回車,往下翻,見下圖,
Apache 默認虛擬主機
兩個框框的內容都是以 <VirtualHost :80> 開頭,以 <VirtualHost :80> 結尾,表示一個主機,也就是一個網站。這邊需要做一些更改,ServerAdmin 用來定義管理員的郵箱,要不要都無所謂,可以刪掉。DocumentRoot 定義網站和目錄在哪裏,可以重新定義。ServerName 定義網站的域名,只能寫一個域名。ServerAlias 定義網站的別名,可以寫多個域名。ErrorLog 指定錯誤日誌,CustomLog 指定訪問日誌。這樣子就定義了一個網站,具體見下圖,
Apache 默認虛擬主機
保存並退出,這邊定義的虛擬主機,一旦生效,之前在 httpd.conf 裏定義的 www.example.com 就失效了。
Apache 默認虛擬主機
接着完善一下剛纔的設置,見下圖,
Apache 默認虛擬主機
現在需要在對應的站點根目錄下創建一個文件,輸入命令 vim /data/wwwroot/abc.com/index.php ,回車,見下圖,
Apache 默認虛擬主機
輸入上圖的內容,保存並退出。輸入命令 vim /data/wwwroot/111.com/index.php ,回車,見下圖,
Apache 默認虛擬主機
保存並退出。然後檢查一下配置文件的語法,再加載配置文件。
Apache 默認虛擬主機
以上準備工作就完成了,接下來測試一下虛擬主機。
首先,如果域名沒有綁定到 htdocs 上,ping 的時候就會連接到外網去,並沒有在本機內網上,見下圖,
Apache 默認虛擬主機
所以,要想訪問 www.abc.com 這個網站在本機上,可以編輯 vi /etc/hosts,指定一下。還有另一種辦法,這邊介紹一個新命令 curl,-x 選項,輸入命令 curl -x192.168.218.128:80 abc.com ,回車,見下圖,
Apache 默認虛擬主機
效果非常明顯,無論什麼域名指向過來,訪問的都是 abc.com,是虛擬主機配置裏面的第一個虛擬主機,就是默認的虛擬主機。所謂默認虛擬主機,就是訪問什麼域名,只要解析到這個 IP 上,都會訪問這個網站,訪問這個網站對應的虛擬主機配置,也就是 abc.com。接着訪問一下 example.com,見下圖,
Apache 默認虛擬主機
這邊111.com 是第二個虛擬主機的域名,訪問的 www.111.com ,並不是 111.com 的域名,所以訪問到了第一個虛擬主機上去。只要搜索的域名不在我們設置的配置上,就會匹配到第一個虛擬主機上。第一個就叫做默認的虛擬主機配置文件。
這邊我們也可以發現,只要開啓了這邊 VirtualHost 配置文件的虛擬主機,之前 httpd.conf 配置文件上的ServerName 和 DocmentRoot都會失效。
以上這麼多內容就兩個結論:
(1)、在主配置文件 httpd.conf 中,打開了 VirtualHost 虛擬主機的配置文件,這時候虛擬主機配置文件就生效了,而主配置文件裏所定義的ServerName 和 DocmentRoot就會失效。
(2)、虛擬主機配置文件,一旦打開,裏面可以定義很多個 VirtualHost 虛擬主機的配置文件,每個 VirtualHost 裏面都有對應的 ServerName 和 DocmentRoot,每個 VirtualHost 都代表一個站點,都是一個虛擬主機。在虛擬主機裏邊有個比較特殊的情況,存在一個默認的虛擬主機,就是無論任何域名,只要不在其他虛擬主機上,就會解析到這個 IP上,都會訪問到這個默認虛擬主機。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章