虛擬Web主機(jī)指的是在同一臺(tái)服務(wù)器中運(yùn)行多個(gè)Web站點(diǎn),其中的每個(gè)站點(diǎn)實(shí)際并不獨(dú)立占用整個(gè)服務(wù)器,因此被稱(chēng)為“虛擬”Web主機(jī)。通過(guò)虛擬Web主機(jī)服務(wù)可以充分利用服務(wù)器的硬件資源,從而大大降低網(wǎng)站構(gòu)建及運(yùn)行成本。
使用httpd服務(wù)可以非常方便地構(gòu)建虛擬主機(jī)服務(wù)器,只需要運(yùn)行一個(gè)httpd服務(wù)就能同事支撐大量的Web站點(diǎn)。
httpd服務(wù)支持的虛擬主機(jī)類(lèi)型包括以下三種:
基于域名:為每個(gè)虛擬主機(jī)使用不同的域名,但是其對(duì)應(yīng)的IP地址是相同的;
基于IP地址:為每個(gè)虛擬主機(jī)使用不同的域名,其各自對(duì)應(yīng)的IP地址也不相同;
基于端口:這種方式并不使用域名、IP地址來(lái)區(qū)分不同的站點(diǎn)內(nèi)容,而是使用不同的TCP端口,因此用戶(hù)在瀏覽不同的虛擬站點(diǎn)時(shí)需要同時(shí)指定端口號(hào)才能訪問(wèn)。
這幾種虛擬Web主機(jī)中,基于域名的虛擬主機(jī)是使用最為廣泛的;基于IP地址和基于端口的虛擬主機(jī)一般只適用于公司內(nèi)部。
基于域名主機(jī)的虛擬主機(jī)實(shí)現(xiàn)步驟:
1.為虛擬主機(jī)提供域名解析
首先需要搭建DNS服務(wù)以便提供域名解析,搭建DNS服務(wù)詳細(xì)步驟可以參考博文CentOS 7搭建DNS服務(wù),這里只介紹關(guān)鍵配置信息:
[root@localhost /]# vim /etc/named.conf //修改DNS服務(wù)主配置文件 ………… //省略部分內(nèi)容 zone "a.com" IN { type master; file "a.com.zone"; }; zone "b.com" IN { type master; file "b.com.zone"; }; [root@localhost /]# vim /var/named/a.com.zone //編寫(xiě)a.com區(qū)域配置文件 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS www.a.com. www IN A 192.168.1.1 [root@localhost /]# vim /var/named/b.com.zone //編寫(xiě)b.com區(qū)域配置文件 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS www.b.com. www IN A 192.168.1.1 [root@localhost /]# systemctl start named //啟動(dòng)DNS服務(wù) [root@localhost /]# nslookup > www.a.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.a.com Address: 192.168.1.1 > www.b.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.b.com Address: 192.168.1.1 //測(cè)試解析
2.為虛擬主機(jī)準(zhǔn)備網(wǎng)頁(yè)文檔
[root@localhost /]# mkdir -p /var/www/html/acom [root@localhost /]# mkdir -p /var/www/html/bcom [root@localhost /]# echo "<h1>www.a.com</h1>" > /var/www/html/acom/index.html [root@localhost /]# echo "<h1>www.b.com</h1>" > /var/www/html/bcom/index.html //文件存放位置可以自定義
3.添加虛擬主機(jī)配置
當(dāng)虛擬Web主機(jī)的數(shù)量較多時(shí),建議使用獨(dú)立的虛擬主機(jī)配置文件,然后在httpd服務(wù)的主配置文件通過(guò)Include加載這些配置。這樣可以將對(duì)httpd服務(wù)的主配置文件的修改減至最少,更方便配置內(nèi)容的維護(hù)。
root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf //創(chuàng)建獨(dú)立的配置文件 <VirtualHost *:80> //*表示所有地址 ServerAdmin webmaster@a.com //管理員郵箱地址 DocumentRoot "/var/www/html/acom" //設(shè)置a虛擬站點(diǎn)區(qū)域 ServerName www.a.com //域名 ServerAlias www.dummy-host.example.com //別名 ErrorLog "logs/www.a.com.error_log" //錯(cuò)誤日志 CustomLog "logs/www.a.com.access_log" common //訪問(wèn)日志 <Directory "/var/www/html"> Require all granted //允許所有主機(jī)訪問(wèn) </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@b.com DocumentRoot "/var/www/html/bcom" ServerName www.b.com ServerAlias www.dummy1-host.example.com ErrorLog "logs/www.b.com.error_log" CustomLog "logs/www.b.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> [root@localhost /]# vim /usr/local/httpd/conf/httpd.conf //編寫(xiě)httpd服務(wù)的主配置文件 ………… //省略部分內(nèi)容 Include conf/extra/httpd-vhosts.conf //加載獨(dú)立的配置文件 [root@localhost /]# systemctl start httpd //啟動(dòng)httpd服務(wù)
4.客戶(hù)機(jī)訪問(wèn)測(cè)試
基于IP地址的虛擬主機(jī)實(shí)現(xiàn)步驟
實(shí)驗(yàn)環(huán)境中,所以在服務(wù)器上模擬一個(gè)IP地址
[root@localhost /]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 //復(fù)制網(wǎng)卡配置文件 [root@localhost network-scripts]# vim ifcfg-ens33:0 //修改剛才復(fù)制的網(wǎng)卡配置文件 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33:0 //必須修改 UUID=fddc7556-c28d-4149-afb8-13356cdeb279 DEVICE=ens33:0 //必須修改 ONBOOT=yes IPADDR=192.168.1.11 //必須修改 [root@localhost network-scripts]# ifdown ens33:0;ifup ens33:0 //重新加載ens33:0網(wǎng)卡的配置文件 [root@localhost network-scripts]# ifconfig ens33:0 ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:0c:29:98:42:5d txqueuelen 1000 (Ethernet) [root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf //修改虛擬主機(jī)配置文件 <VirtualHost 192.168.1.1:80> //把*改為IP地址 ServerAdmin webmaster@a.com DocumentRoot "/var/www/html/acom" ServerName www.a.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.a.com.error_log" CustomLog "logs/www.a.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.1.11:80> //把*改為IP地址 ServerAdmin webmaster@b.com DocumentRoot "/var/www/html/bcom" ServerName www.b.com ServerAlias www.dummy1-host.example.com ErrorLog "logs/www.b.com.error_log" CustomLog "logs/www.b.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> [root@localhost /]# systemctl restart httpd //重新加載httpd服務(wù)
客戶(hù)機(jī)訪問(wèn)測(cè)試
基于端口的虛擬主機(jī)實(shí)現(xiàn)步驟
修改虛擬主機(jī)配置文件
root@localhost /]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <VirtualHost *:80> ServerAdmin webmaster@a.com DocumentRoot "/var/www/html/acom" ServerName www.a.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.a.com.error_log" CustomLog "logs/www.a.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> <VirtualHost *:8080> //修改端口信息 ServerAdmin webmaster@b.com DocumentRoot "/var/www/html/bcom" ServerName www.b.com ServerAlias www.dummy1-host.example.com ErrorLog "logs/www.b.com.error_log" CustomLog "logs/www.b.com.access_log" common <Directory "/var/www/html"> Require all granted </Directory> </VirtualHost> Listen 8080 //監(jiān)聽(tīng)8080端口,寫(xiě)在主配置文件或虛擬主機(jī)配置文件都可以 [root@localhost /]# systemctl restart httpd //重新加載httpd服務(wù)
強(qiáng)烈建議,修改端口信息的時(shí)候,千萬(wàn)不能修改為1~1024之間的端口,因?yàn)檫@些端口已經(jīng)被系統(tǒng)服務(wù)使用!
客戶(hù)機(jī)訪問(wèn)測(cè)試
虛擬目錄實(shí)現(xiàn)步驟
[root@localhost httpd-2.4.25]# mkdir /yum [root@localhost httpd-2.4.25]# echo "<h1>www.yum.com</h1>" > /yum/index.html //創(chuàng)建虛擬目錄測(cè)試文件 [root@localhost httpd-2.4.25]# vim /usr/local/httpd/conf/httpd.conf //編寫(xiě)httpd服務(wù)主配置文件 ………… //省略部分內(nèi)容 Alias /test "/yum" //定義虛擬目錄“/test”,物理路徑為“/yum” <Directory "/yum"> //定義目錄訪問(wèn)權(quán)限 Options Indexes MultiViews FollowSymLinks //固定格式,這項(xiàng)可以忽略 AllowOverride None //固定格式。這項(xiàng)可以忽略 Order allow,deny //匹配順序?yàn)橄仍试S,后拒絕,這項(xiàng)可以忽略 Allow from all //設(shè)置允許所有人訪問(wèn),這項(xiàng)可以忽略 Require all granted //對(duì)這個(gè)目錄給予授權(quán) </Directory> [root@localhost httpd-2.4.25]# systemctl restart httpd //重新啟動(dòng)httpd服務(wù)
客戶(hù)機(jī)測(cè)試訪問(wèn)
如果想針對(duì)虛擬目錄開(kāi)啟身份驗(yàn)證
將上面的配置做如下修改:
[root@localhost httpd]# vim /usr/local/httpd/conf/httpd.conf //修改httpd服務(wù)主配置文件 ………… //省略部分內(nèi)容 Alias /test "/yum" <Directory "/yum"> Options Indexes MultiViews FollowSymLinks //固定格式可以省略 AllowOverride None //固定格式可以省略 AuthName "test" //定義受保護(hù)的領(lǐng)域名稱(chēng),該內(nèi)容將在瀏覽器彈出的認(rèn)證對(duì)話框中顯示 AuthType Basic //設(shè)置認(rèn)證的類(lèi)型,Basic為基本的認(rèn)證 AuthUserFile /usr/local/httpd/user //設(shè)置用于保存用戶(hù)賬號(hào)、密碼的認(rèn)證文件路徑 Require valid-user //要求只有認(rèn)證文件中的合法用戶(hù)才能訪問(wèn)。valid-user表示所有合法用戶(hù) </Directory> [root@localhost htdocs]# cd /usr/local/httpd/ [root@localhost httpd]# bin/htpasswd -c /usr/local/httpd/conf/123.txt xiaozhang New password: Re-type new password: Adding password for user xiaozhang [root@localhost httpd]# systemctl restart httpd //重新啟動(dòng)httpd服務(wù)
針對(duì)Web網(wǎng)站設(shè)置用戶(hù)限制,可以參考博文:CentOS 7 中httpd服務(wù)的用戶(hù)限制詳解
客戶(hù)機(jī)訪問(wèn)測(cè)試
如果虛擬目錄針對(duì)虛擬主機(jī),請(qǐng)?jiān)谔摂M主機(jī)配置文件中添加。