虛擬 web 主機指的是在同一臺服務器中運行多個 web 站點,其中的每一個站點實際上並不獨立佔用整個服務器,所以被稱爲「虛擬」 web主機。經過虛擬 web 主機能夠充分利用服務器的硬件資源,從而大大下降網站構建及運行成本。
使用 httpd 能夠很是方便地構建虛擬主機服務器,只須要運行一個 httpd 服務就可以同時支撐起大量的 web 站點。
httpd 支持的虛擬主機類型包括如下三種:
基於域名:相同IP 、相同端口 、不一樣域名
基於IP地址:不一樣IP、相同端口
基於端口:相同IP、不一樣端口
實際中,咱們最經常使用的仍是不一樣域名來訪問網站。
1、基於域名的虛擬主機:
首先咱們須要爲虛擬主機提供域名解析:html
[root@www /]# vim /etc/named.conf …… // zone "test1.com" in { type master; file "test1.com.zone"; }; zone "test2.com" in { type master; file "test2.com.zone"; }; [root@www /]# vim /var/named/test1.com.zone …… // in ns www.test1.com. www in a 192.168.1.10 [root@www /]# vim /var/named/test2.com.zone …… // in ns www.test2.com. www in a 192.168.1.10
爲虛擬主機準備網頁文檔:web
[root@www /]# mkdir -p /var/www/html/test1com [root@www /]# mkdir -p /var/www/html/test2com [root@www /]# echo "<h1>www.test1.com</h1>" > /var/www/html/test1com/index.html [root@www /]# echo "<h1>www.test2.com</h1>" > /var/www/html/test2com/index.html
添加虛擬主機配置:vim
[root@www /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 配置 test1 的虛擬站點區域: …… // 省略部份內容 <VirtualHost *:80> # 配置監聽地址和端口 「*」 表明任意地址 ServerAdmin webmaster@test.com # 設置管理員的郵箱 可刪除 DocumentRoot "/var/www/html/test1com" # 指定網站根目錄 ServerName www.test1.com # 配置域名 ServerAlias www.dummy-host.example.com # 配置別名 ErrorLog "logs/www.test1.com-error_log" # 記錄錯誤日誌 CustomLog "logs/www.test1.com-access_log" common # 記錄訪問日誌 <Directory "/var/www/html"> # 設置目錄訪問權限 Require all granted # 容許全部 </Directory> </VirtualHost> 配置 test2 的虛擬站點區域: <VirtualHost *:80> ServerAdmin webmaster@test.com DocumentRoot "/var/www/html/test2com" ServerName www.test2.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.test2.com-error_log" CustomLog "logs/www.test2.com-access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost>
[root@www /]# vim /usr/local/httpd/conf/httpd.conf # 進入主配置文件 …… Include conf/extra/httpd-vhosts.conf # 找到本行後將開頭 # 去掉 [root@www /]# systemctl restart httpd 重啓服務使配置生效
客戶機訪問 web 驗證:
2、基於 IP 地址的虛擬主機:
每一種方式之間毫無任何關聯,千萬別把基於IP地址的虛擬主機和基於域名的搞混了服務器
[root@www /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf …… <VirtualHost 192.168.1.10:80> # 配置監聽地址爲 192.168.1.10 ServerAdmin webmaster@test.com DocumentRoot "/var/www/html/test1com" ServerName www.test1.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.test1.com-error_log" CustomLog "logs/www.test1.com-access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.1.20:80> # 配置監聽地址爲 192.168.1.20 ServerAdmin webmaster@test.com DocumentRoot "/var/www/html/test2com" ServerName www.test2.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.test2.com-error_log" CustomLog "logs/www.test2.com-access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost>
3、基於端口的虛擬主機:ide
[root@www /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf …… <VirtualHost 192.168.1.10:80> ServerAdmin webmaster@test.com DocumentRoot "/var/www/html/test1com" ServerName www.test1.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.test1.com-error_log" CustomLog "logs/www.test1.com-access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.1.10:8080> # 修改端口號 ServerAdmin webmaster@test.com DocumentRoot "/var/www/html/test2com" ServerName www.test2.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.test2.com-error_log" CustomLog "logs/www.test2.com-access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> listen 80 # 監聽80端口(默認80也可不用寫這一行) listen 8080 # 監聽8080端口
注意:每次配置完畢後都須要重啓服務網站