1 基于主機名實現三個虛擬主機
(1).創建網站目錄與測試文件
(2).創建虛擬主機文件(目錄為/etc/httpd/conf.d/下)
(3).修改測試apache主機hosts文件(就不用DNS服務器解析,方便測試),測試httpd配置文件是否有問題,重啟httpd服務
(4)修改測試主機hosts文件(就不用DNS服務器解析,方便測試),在用firefox瀏覽器分別打開測試網站,出現下圖即可
2 每虛擬主機使用獨立的訪問日志和錯誤日志
(1).在對應虛擬主機內添加對應的日志文件 ,內容為(
ErrorLog "logs/node2_mage_error_log(自定義錯誤日志)"
LogLevel warn
CustomLog "logs/node2_mage_access_log(自定義訪問日志)" combined
) ,后重新加載httpd服務
(2)在站點下創建測試test目錄,但是不給授權操作,分別訪問網站與目錄,讓httpd服務創建訪問與錯誤日志
(3)查看虛擬主機自定訪問日志與錯誤日志
3. 第三個虛擬主機的/admin要進行用戶訪問認證
(1).配置虛擬主機3認證
<Directory "/www/node3.mage.com/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Please,Enter your name and password"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user admin
</Directory>
(2).創建目錄與配置文件,重啟服務器
(3).修改測試主機解析文件,方便測試
(4).輸入密碼,查看測試頁面
4 .在第二個虛擬主機上提供/status;
(1).配置虛擬主機2,增加服務器狀態查看頁面配置內容,重載服務
(2).查看結果
5.在第三個虛擬主機提供路徑別名/bbs,訪問其它文件系統路徑;
(1)創建訪問目錄與測試文件
(2)httpd配置文件修改,增加別名訪問與相應目錄訪問權限修改
(3)重啟服務器,測試
6.嘗試使用混合類型的虛擬主機:基于IP,PORT和ServerName
(1)修改虛擬主機1,讓組件ip不同于其他。修改虛擬主機2,使其端口與其他端口不同。虛擬主機3不做修改,使其基于FDQN訪問
(2)重啟apache服務,查看對應端口是否打開
(3)訪問測試
練習2:使用腳本實現以上功能;
每虛擬使用單獨的配置文件;
腳本可接受參數,參數虛擬主機名稱;
程序執行情況:
生成配置文件:
程序代碼:
#!/bin/bash
#auther:maoxiong date:16-10-07
echo "####################################################################"
echo "# Virtual Machine Creation Tool V 1.0 #"
echo "# author:MaoXiong #"
echo "# Please complete the virtual machine creation according to #"
echo "# the prompt #"
echo "####################################################################"
vstat=0 #循環狀態量
vHost=' ' #ServerName
vDroot=' ' #DocumentRoot
vipport=' ' #虛擬主機IP與PORT
lport=' '
authdir=' ' #認證目錄
authuser=' ' #認證用戶
authpw=' ' #認證用戶
while [ $vstat -eq 0 ];do
read -p "Please enter a VirtaulHost name and host directory, separated by spaces : " vhost vroot
[ -e /etc/httpd/conf.d/$vhost.conf ] && echo "host is exits ." || vHost="$vhost"
grep -o "$vroot" /etc/httpd/conf.d/* && echo "ServerDir is exits" || vDroot=$vroot
[ -n $vhost ] && [ -n $vroot ] && vstat=1
done ; vstat=0
while [ $vstat -eq 0 ];do
read -p "Please enter IP with port, for example 1.1.1.1 80 : " vport vport1
if [ -z $vport ] ;then
echo "IP or port is null ."
else
vipport=$vport:$vport1
lport=$vport1; vstat=1
fi
done; vstat=0
while [ $vstat -eq 0 ] ;do
read -p "Please enter the authentication directory : " dir
read -p "Please enter the authentication user name and password, separated by spaces : " user pd
authdir=$dir; authuser=$user;
[ -e /etc/httpd/conf.d/.htpasswd ] || touch /etc/httpd/conf.d/.htpasswd
htpasswd -mb /etc/httpd/conf.d/.htpasswd $user $pd
authpw=`grep "$user" /etc/httpd/conf.d/.htpasswd | cut -d: -f2`
vstat=1
done
echo "——————————————————————–"
echo "Please,Confirm configuration information"
echo "VirtualHost ——-> $vHost"
echo "DocumentRoot ——-> $vDroot"
echo "VirtualHost IP and Port —-> $vipport"
echo "Certification directory —-> $authdir"
echo "Authenticate user —-> $authuser"
echo "Authenticate password —-> $authpw"
echo "ErrorLog —-> /var/log/httpd/$vHost_error.log "
echo "AccessLog —-> /var/log/httpd/$vhost_access.llog "
echo "——————————————————————–"
read -p "Confirm the installation of the virtual host,(y or n) : " confy
[ "$confy" == "n" ] && exit || echo "installation……"
vhdir=/etc/httpd/conf.d/$vHost.conf
touch /etc/httpd/conf.d/$vHost.conf
if [ $lport -ne 80 ];then
echo "Listen $lport" >> $vhdir
fi
echo "<VirtualHost $vipport>" >> $vhdir
echo " ServerName $vHost" >> $vhdir
mkdir -p /www/$vDroot
echo " DocumentRoot \"/www/$vDroot\"" >> $vhdir
echo " <Directory \"/www/$vDroot\">" >> $vhdir
echo " Options None" >> $vhdir
echo " AllowOverride None" >> $vhdir
echo " Require all granted" >> $vhdir
echo " </Directory>" >> $vhdir
echo " <Directory \"/www/$vDroot/$authdir\">" >> $vhdir
echo " AuthType basic" >> $vhdir
echo " AuthName \"Admin Area, Enter your name/password\"" >> $vhdir
echo " AuthUserFile \"/etc/httpd/conf/.htpasswd\"" >> $vhdir
echo " Require user $authuser" >> $vhdir
echo " </Directory> " >> $vhdir
echo " <Location /status> " >> $vhdir
echo " SetHandler server-status " >> $vhdir
echo " Require all granted" >> $vhdir
echo " </Location>" >> $vhdir
echo " CustomLog \"logs/$vhost_access.log\" combined " >> $vhdir
echo " ErrorLog \"logs/$vhost_error.log\"" >> $vhdir
echo " </VirtualHost> ">> $vhdir
echo "installation is complete ."
原創文章,作者:maoxiong,如若轉載,請注明出處:http://www.www58058.com/50131