Apache的虛擬主機功能 (Virtual Host) 是可以讓一台服務器基於IP、主機名或端口號實現提供多個網站服務的技術。
第一種情況:基於IP地址
這種情況很常見:一台服務器擁有多個IP地址,當用戶訪問不同IP地址時顯示不同的網站頁面。
第1步為網卡添加多個IP地址:(方法不唯一)

重新啟動網卡設備后使用ping命令檢查是否配置正確

第2步:分別創建網站數據目錄。
在/home/wwwroot目錄下分別創建三個網站數據目錄:
mkdir -p /home/wwwroot/100
mkdir -p /home/wwwroot/110
mkdir -p /home/wwwroot/120
分別在這三個網站數據目錄中寫入主頁文件,內容為該網站的IP地址:
[root@linuxprobe ~]# echo "IP:192.168.5.100" > /home/wwwroot/100/index.html
[root@linuxprobe ~]# echo "IP:192.168.5.110" > /home/wwwroot/110/index.html
[root@linuxprobe ~]# echo "IP:192.168.5.120" > /home/wwwroot/120/index.html

第3步:在配置文件中描述基於IP地址的虛擬主機。
編輯主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定義虛擬主機信息:
<VirtualHost 192.168.5.100>
DocumentRoot /home/wwwroot/100
ServerName www.haozhikuan-hbza.com
<Directory /home/wwwroot/100 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.5.110>
DocumentRoot /home/wwwroot/110
ServerName bbs.haozhikuan-hbza.com
<Directory /home/wwwroot/110 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.5.120>
DocumentRoot /home/wwwroot/120
ServerName tech.haozhikuan-hbza.com
<Directory /home/wwwroot/120 >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

直接在末尾復制,然后重啟服務即可
第4步:分別訪問192.168.5.100/110/120驗證結果:



第二種情況:基於主機名
當服務器無法為每個網站都分配到獨立IP地址時,可以試試讓Apache服務程序自動識別來源主機名或域名然后跳轉到指定的網站
第1步:配置網卡IP地址與hosts文件。
hosts文件作用是定義IP地址與主機名的映射關系,即強制將某個主機名地址解析到指定的IP地址。

vim /etc/hosts
//每行只能寫一條,格式為IP地址+空格+主機名(域名)。
第2步:分別創建網站數據目錄:
mkdir -p /home/wwwroot/www
mkdir -p /home/wwwroot/bbs
mkdir -p /home/wwwroot/tech
分別在網站目錄中寫入首頁文件:
echo "www.haozhikuan-hbza.com" > /home/wwwroot/www/index.html
echo "www.haozhikuan-hbza.com" > /home/wwwroot/bbs/index.html
echo "www.haozhikuan-hbza.com" > /home/wwwroot/tech/index.html

第3步:在配置文件中描述基於主機名稱的虛擬主機。
編輯主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定義虛擬主機信息:
<VirtualHost 192.168.5.100>
DocumentRoot "/home/wwwroot/www"
ServerName "www.haozhikuan-hbza.com"
<Directory "/home/wwwroot/www">
AllowOverride None
Require all granted
</directory>
</VirtualHost>
<VirtualHost 192.168.5.110>
DocumentRoot "/home/wwwroot/bbs"
ServerName "bbs.haozhikuan-hbza.com"
<Directory "/home/wwwroot/bbs">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.5.120>
DocumentRoot "/home/wwwroot/tech"
ServerName "tech.haozhikuan-hbza.com"
<Directory "/home/wwwroot/tech">
AllowOverride None
Require all granted
</directory>
</VirtualHost>

復制重啟服務即可
第4步:分別訪問網站驗證結果



第三種情況:基於端口號
我們可以讓服務器開啟多個服務端口后,然后讓用戶能夠通過訪問服務器的指定端口來找到想要的網站。
第1步:配置服務器的IP地址:

第2步:分別創建網站數據目錄。
分別創建端口為6111,6222的網站數據目錄:
mkdir -p /home/wwwroot/6111
mkdir -p /home/wwwroot/6222
分別在網站數據目錄中寫入不同內容的主頁文件:
[root@linuxprobe ~]# echo "port:6111" > /home/wwwroot/6111/index.html
[root@linuxprobe ~]# echo "port:6222" > /home/wwwroot/6222/index.html

第3步:在配置文件中描述基於端口號的虛擬主機。
編輯主配置文件(/etc/httpd/conf/httpd.conf),找到約在42行的Listen 80,並在下面追加:
Listen 6111
Listen 6222

然后在主配置文件的末尾按下面格式定義虛擬主機信息:
<VirtualHost 192.168.5.100:6111>
DocumentRoot “/home/wwwroot/6111”
ServerName www.haozhikuan-hbza.com
<Directory “/home/wwwroot/6111”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.5.100:6222>
DocumentRoot “/home/wwwroot/6222”
ServerName bbs.haozhikuan-hbza.com
<Directory “/home/wwwroot/6222”>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第4步:分別訪問網站驗證結果:


注意:以上三種情況均在SElinux禁用情況下進行實驗的,每次實驗最好還原上一次快照,防止配置文件沖突
編輯主配置文件(/etc/httpd/conf/httpd.conf),在主配置文件的末尾按下面格式定義虛擬主機信息,記住這個路徑!
