一、虛擬web主機的類型
1、虛擬 Web 主機介紹
虛擬 Web 主機指的是在同一台服務器中運行多個 Web 站點,其中每一個站點實際 上並不獨立占用整個服務器,因此被稱為“虛擬”Web 主機。通過虛擬 Web 主機服務可 以充分利用服務器的硬件資源,從而大大降低網站構建及運行成本。
使用 httpd 服務可以非常方便地構建虛擬主機服務器,只需要運行一個 httpd 服務 就能夠同時支撐大量的 Web 站點。
2、apache服務支持的三種虛擬web主機類型
2.1、基於域名的類型
基於域名:為每個虛擬主機使用不同的域名,但是其對應的 IP 地址是相同的。這是使用最為普遍的虛擬 Web 主機類型。
2.2、基於IP地址的類型
基於 IP 地址:為每個虛擬主機使用不同的域名,且各自對應的 IP 地址也不相同。 這種方式需要為服務器配備多個網絡接口,因此應用並不是非常廣泛。
2.3、基於端口的類型
基於端口:這種方式並不使用域名、IP地址來區分不同的站點內容,而是使用了不同的 TCP 端口號,因此用戶在瀏覽不同的虛擬站點時需要同時指定端口號才能訪問。
注:因為不同類型的虛擬主機其區分機制各不相同,建議不要同時使用,以免相互混淆。
二、構建基於域名的虛擬web主機
1、提供域名解析
首先需要向 DNS 服務提供商注冊各虛擬 Web 站點的域名,以便當訪問其中任何一 個虛擬 Web 站點時,最終訪問的都是同一個 IP 地址——實際支撐所有虛擬 Web 站點 的服務器的 IP 地址。
假設我們有兩個域名www.wlm.com、www.wat.com。對用應的IP地址為20.0.0.58。我們可以將兩個域名作為apache服務的兩個虛擬的web站點同時對應一個IP地址20.0.0.58。
2、准備網頁文檔
為每個虛擬 Web 主機准備網站目錄及網頁文檔。分別為每個虛擬 Web 主機提供包含不同內容的首頁文件。
[root@localhost ~]# mkdir -p /var/www/html/wlmcom [root@localhost ~]# mkdir -p /var/www/html/watcom [root@localhost opt]# echo "<h1>www.wlm web1</h1>" > /var/www/html/wlm/index.html [root@localhost opt]# echo "<h1>www.wat web2</h1>" > /var/www/html/wat/index.html
3、更改配置文件
在 apache服務的主配置文件中,若要啟用基於域名的虛擬 Web 主機,通常需要更改以下兩個區域
-
虛擬主機區域配置:使用<VirtualHost 監聽地址>……區域配置,為每一 個虛擬 Web 主機建立獨立的配置內容。其中至少應包括虛擬主機的網站名稱、網 頁根目錄的配置項;其他(如管理郵箱、訪問日志等)配置項可根據實際需要添加。
-
訪問網頁根目錄的權限配置:使用<Directory 目錄位置>……區域配置,為每一個虛擬 Web 主機的網站目錄設置訪問權限,如允許任何人訪問。目錄訪問可以繼承其父目錄的授權許可,因此可以采取直接為父文件夾授權訪問權限的方法來簡化配置。 當虛擬 Web 主機的數量較多時,建議使用獨立的虛擬主機配置文件。
[root@localhost opt]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf ....... //省略部分信息 //可在此位置手動創建獨立的訪問目錄權限 <VirtualHost *:80> //設置域名 www.wlm.com 虛擬站點區域 DocumentRoot "/var/www/html/wlm" //服務訪問域名網頁的路徑 ServerName www.wlm.com //服務訪問的域名 ErrorLog "logs/www.wlm.com.error_log" //錯誤訪問日志存放路徑 CustomLog "logs/www.wel.com.access_log" common //訪問日志存放路徑 <Directory "/var/www/html"> //設置目錄訪問權限 Require all granted //允許所有訪問 </Directory> </VirtualHost> <VirtualHost *:80> //設置域名 www.wlm.com 虛擬站點區域。 DocumentRoot "/var/www/html/wat" //服務訪問域名網頁的路徑 ServerName www.wat.com //服務訪問的域名 ErrorLog "logs/www.wat.com.error_log" //錯誤訪問日志存放路徑 CustomLog "logs/www.wat.com.access_log" common //訪問日志存放路徑 <Directory "/var/www/html"> //設置目錄訪問權限 Require all granted //允許所有訪問 </Directory> </VirtualHost>
然后在 httpd.conf 文件中通過開啟 “Include conf/extra/httpd-vhosts.conf”加載這些配置。這樣可以將對 httpd.conf 文件的改動減至最少,更方便配置內容的維護。
[root@localhost opt]# vim /usr/local/httpd/conf/httpd.conf ....... //省略部分信息 Include conf/extra/httpd-vhosts.conf //加載獨立的配置文件,將行首的 "#" 刪除 ....... //省略部分信息 [root@localhost opt]# systemctl restart httpd //重啟httpd服務
4、客戶機訪問虛擬的web主機
首先,在客戶機的hosts文件中加入dns域名的映射,再在客戶機的瀏覽器中,使用網站名稱分別訪問不同的域名,能夠看到之前設定的網頁內容,此時表示基於域名的虛擬主機配置成功。若無法看到此結果,則需要檢查兩個站點的首頁文件,根據上述過程排查配置錯誤,必要時清空瀏覽器緩存后重新訪問。
Linux的hosts文件路徑為:/etc/hosts 20.0.0.58 www.wlm.com //添加內容 20.0.0.58 www.wat.com window的hosts文件路徑為:C:\Windows\System32\drivers\etc\hosts 20.0.0.58 www.wlm.com //添加內容 20.0.0.58 www.wat.com
測試結果顯示:
域名為www.wlm.com的測試頁
三、構建基於IP地址的虛擬web主機
構建基於 IP 地址或基於端口的虛擬主機的過程與基於域名的虛擬主機類似,也需要先提供域名解析、准備網頁文檔,再調整 httpd 配置、重啟 httpd 服務,然后在客戶 機中訪問虛擬主機進行測試。其中最主要的區別是,不同類型的虛擬主機在 httpd.conf 文件中的配置內容略有不同。
對於基於 IP 地址的虛擬主機,每個虛擬 Web 主機各自使用不同的 IP 地址,但是 都通過同一台 httpd 服務器對外提供 Web 瀏覽服務。正因為如此,用來支撐這些虛擬 Web 主機的服務器也就需要有大量的網絡接口,這在實際應用中往往不太方便,所以 基於 IP 地址的虛擬主機並不像基於域名虛擬主機那樣應用廣泛。
更改httpd.conf文件配置
[root@localhost opt]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf ....... //省略部分信息 //可在此位置手動創建獨立的訪問目錄權限 <VirtualHost 20.0.0.58> //基於20.0.0.58IP的虛擬web主機配置 DocumentRoot "/var/www/html/wlm" //服務訪問域名網頁的路徑 ServerName www.wlm.com //服務訪問的域名 ErrorLog "logs/www.wlm.com.error_log" //錯誤訪問日志存放路徑 CustomLog "logs/www.wel.com.access_log" common //訪問日志存放路徑 <Directory "/var/www/html"> //設置目錄訪問權限 Require all granted //允許所有訪問 </Directory> </VirtualHost> <VirtualHost 20.0.0.55> //基於20.0.0.55的虛擬web主機的配置 DocumentRoot "/var/www/html/wat" //服務訪問域名網頁的路徑 ServerName www.wat.com //服務訪問的域名 ErrorLog "logs/www.wat.com.error_log" //錯誤訪問日志存放路徑 CustomLog "logs/www.wat.com.access_log" common //訪問日志存放路徑 <Directory "/var/www/html"> //設置目錄訪問權限 Require all granted //允許所有訪問 </Directory> </VirtualHost> [root@localhost opt]# vim /usr/local/httpd/conf/httpd.conf ....... //省略部分信息 Include conf/extra/httpd-vhosts.conf //加載獨立的配置文件,將行首的 "#" 刪除 ....... //省略部分信息 [root@localhost opt]# systemctl restart httpd //重啟httpd服務
四、構建基於端口的虛擬web主機
基於端口的虛擬主機通常只用於同一個 Web 站點,其針對的網站名稱、IP 地址往 往是相同的,但通過不同的 TCP 端口來提供訪問不同網頁內容的服務入口。在瀏覽器 中訪問非 80 端口的 Web 服務器時,需要明確指出服務器的端口號,如訪問 http://www.wat.com:55/或http://20.0.0.58.55/。
[root@localhost opt]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <VirtualHost 20.0.0.58:80> //基於80端口的虛擬web主機配置 DocumentRoot "/var/www/html/wlm" ServerName www.wlm.com ErrorLog "logs/www.wlm.com.error_log" CustomLog "logs/www.wel.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> <VirtualHost 20.0.0.58:55> //基於55端口的web主機配置 DocumentRoot "/var/www/html/wat" ServerName www.wat.com ErrorLog "logs/www.wat.com.error_log" CustomLog "logs/www.wat.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost>
配置基於端口的虛擬 Web 主機時,要通過多個 Listen 配置項來指定要監聽的 TCP 端口號,需要更改httpd.conf配置文件。
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf //編輯配置文件 // 使用vim編輯器末行模式/搜索Listen 80服務器默認監聽的端口,在其下一行添加配置 ....... //省略部分信息 Listen 80 Listen 55 //添加監聽55端口 ....... //省略部分信息 Include conf/extra/httpd-vhosts.conf //加載獨立的配置文件,將行首的 "#" 刪除 ....... //省略部分信息 [root@localhost opt]# systemctl restart httpd //重啟httpd服務