虛擬主機的設定

 

虛擬主機是web服務的一項很重要也是很有用的東西,可以讓你在同一臺服務器上定義多個站點,多個不同的主頁面。聽起來很假!但是這是可以實現的,等下我們用實例來演練一下。

虛擬主機,應該並不難理解。虛擬,就是說這不是實際存在的,但是給你的感覺卻是實實在在的!也就是說在同一臺主機的硬件上給虛擬出看上去有多個主機的樣子。這個就體現在網站和網頁上,下面我們就來用實際的例子來說明一下:

我們首先要做的當然是安裝web服務的軟件包httpd了,安裝好httpd軟件包之後,我們先要把/etc/httpd/conf/httpd.conf文件中的DocumentRoot開頭的一行註釋掉,這樣在訪問時就不會顯示原主機上的內容了。

# vim /etc/httpd/conf/httpd.conf

DocumentRoot一行註釋掉

虛擬主機也分爲不同的類型,有基於IP地址認證的和端口認證的,還有基於域名認證的。下面我們一個一個來說明。(注意:學習實驗請在虛擬機中進行!以免“誤傷”!)

基於IP地址認證:

IP地址認證很簡單的,要保證你的主機有兩個IP!也可以使用地址別名我們這裏使用地址別名。另外這裏只是爲了做實驗就使用臨時的地址別名。

下面我們在/etc/httpd/conf.d目錄下創建一個文件(這裏名爲xuni.conf),並添加以下內容:

<VirtualHost 172.16.16.20:80>

ServerName www.aoxuetangli.com           定義服務器名

DocumentRoot /www/aoxuetangli.com      頁面文件的存放路徑

CustomLog /var/log/httpd/aoxuetangli.com/access_log combined    日誌文件

</VirtualHost>

<VirtualHost 172.16.16.22:80>

ServerName www.sishenlaile.com

DocumentRoot /www/sishenlaile.com

</VirtualHost>

完成之後不要着急測試,因爲我們還有幾個文件沒創建呢。文件中定義了頁面文件的存放路徑,一個是/www/aoxuetangli.com,一個是/www/sishenlaile.com。另外還定義了訪問日誌文件/var/log/httpd/aoxuetangli.com/access_log我們要依依創建:

創建頁面存放路徑:

# mkdir -pv /www/{aoxuetangli.comsishenlaile.com}

創建日誌存放目錄:

# mkdir /var/log/httpd/aoxuetangli.com

創建日誌文件:

# touch /var/log/httpd/aoxuetangli.com/access_log

做完這些我們還要給網站提供頁面:

aoxuetangli.com提供主頁面

# vim /www/aoxuetangli.com/index.html

輸入一些內容以便測試時顯示區別(注意:這裏是提供的網頁,要按照網頁格式來寫):

<html>

<h1>hell</h1>

aoxuetangli.com

</html>

sishenlaile.com提供主頁面

# vim /www/sishenlaile.com/index.html

<html>

<h1>sishenlaile.com</h1>

</html>

做完這些就可以啓動服務進行測試了!

啓動服務:

# service httpd start

打開瀏覽器測試一下:

可以看出於我們輸入的內容是一致的,於定義IP的主機也是一致的。下面我們來看一下基於端口的虛擬主機。可以利用以上資源來進行修改,我們只需對xuni.conf文件做一下修改就可以實現:

# vim /etc/httpd/conf.d/xuni.conf

將其改爲一下內容:

<VirtualHost 172.16.16.20:80>

ServerName www.aoxuetangli.com

DocumentRoot /www/aoxuetangli.com

CustomLog /var/log/httpd/aoxuetangli.com/access_log combined

</VirtualHost>

<VirtualHost 172.16.16.20:8080>

ServerName www.mail.com

DocumentRoot /www/mail.com

</VirtualHost>

對應的文件我們都已經創建過了,這裏還要做的一步是將基於端口訪問時需要監聽的端口加上,默認只監聽80端口:

# vim /etc/httpd/conf/httpd.conf

Listen 80下面加上一行:

Listen 8080

然後重啓服務或者讓服務器重讀配置文件

# service httpd restart      #重啓服務

# service httpd reload       #重讀配置文件

然後再用瀏覽器進行測試:

基於端口的虛擬主機也完成了,下面我們來實現一下基於域名的虛擬主機:

還是來修改xuni.conf文件吧,這樣比較省事!

# vim /etc/httpd/conf.d/xuni.conf

修改爲以下內容:

NameVirtualHost 172.16.16.20:80

<VirtualHost 172.16.16.20:80>

ServerName www.aoxuetangli.com

DocumentRoot /www/aoxuetangli.com

CustomLog /var/log/httpd/aoxuetangli.com/access_log combined

</VirtualHost>

<VirtualHost 172.16.16.20:80>

ServerName www.sishenlaile.com

DocumentRoot /www/sishenlaile.com

</VirtualHost>

這裏雖然配置好了虛擬主機,但是我們要訪問域名還要配置DNS服務,不過還有一種辦法,就是修改主機上的hosts文件,Windows系統一般存放在C盤下面是路徑:

Windows\System32\drivers\etc

可能是隱藏文件,打開hosts文件添加下面兩行:

172.16.16.20 www.sishenlaile.com

172.16.16.20 www.aoxuetangli.com

接下來我們來測試一下:

虛擬主機還可以實現當要訪問某個站點時要登錄才能訪問,這樣我們就可以定義我們的內部網絡了,並且只有授權的用戶才能登錄,提高了我們網絡的安全性。

我們定義在訪問sishenlaile.com時要登錄才能訪問,編輯/etc/httpd/conf.d/xuni.conf將定義sishenlaile.com的內容添加幾行,下面爲添加後的內容:

<VirtualHost 172.16.16.20:80>

        ServerName www.sishenlaile.com

        DocumentRoot "/www/sishenlaile.com"

        <Directory "/www/sishenlaile.com">

                Options none                 #定義網頁在被訪問時的訪問屬性

                AllowOverride authconfig     #允許使用與認證授權相關的指令

                AuthType basic               #認證類型

                AuthName "Restrict area."    #定義限定的訪問區域

                AuthUserFile "/etc/httpd/.htpasswd"        #定義用戶及密碼的存放文件

                Require valid-user           #允許指定文件中的所有用戶訪問

        </Directory>

</VirtualHost>

完成之後我們要爲此站點提供用戶和密碼,文件中定義了用戶和密碼的存放路徑在/etc/httpd/.htpasswd我們可以用命令htpasswd來實現創建此文件並創建用戶和密碼:

第一次創建時用-c選項系統會自動創建.htpasswd這個文件,這裏設定的密碼都與用戶名相同,下面來測試一下:

輸入域名之後會提示我們輸入用戶名和密碼,這裏只能登錄.htpasswd文件中含有的用戶,下面是輸入正確的用戶和密碼之後的頁面:

輸入錯誤時會顯示以下頁面:

當輸入錯誤時會返回登錄框,讓你重新登錄。當你取消登錄時會顯示登錄框背後的界面。

有了限制登錄的還不夠,有時我們需要禁止某個網段或者某個主機的訪問,就是不讓他來訪問,連登錄框都不給他,這個功能也是可以實現的,我們來看一下:

編輯我們的配置文件

# vim /etc/httpd/conf.d/xuni.conf

我們禁止192.168.0.234(我的主機)這個主機來訪問我們的域名爲aoxuetangli.com的站點,將文件內容中定義aoxuetangli.com的部分添加點內容,下面是添加後的內容:

<VirtualHost 172.16.16.20:80>

        ServerName www.aoxuetangli.com

        DocumentRoot "/www/aoxuetangli.com"

        CustomLog /var/log/httpd/aoxuetangli.com/access_log combined

        <Directory "/www/aoxuetangli.com">

                Options none

                AllowOverride none       #忽略.htpasswd文件中定義的作用內容

                Order deny,allow         #定義訪問控制列表的控制次序

                Deny from 192.168.0.234  #不允許此主機訪問

        </Directory>

</VirtualHost>

然後重啓服務或者讓服務器重讀配置文件,接着用瀏覽器進行測試:

我們可以看到我的主機也就是192.168.0.234已經不能訪問此域名了!

這三種功能也可以同時使用,但是要注意的是基於域名訪問中的NameVirtualHost 172.16.16.20:80一行一定要放在文件的首行。另外就是在定義哪個主機不能訪問時要將基於IP的、端口的、域名的,全都寫上相關內容,不然你會發現他還能訪問!(本人就因爲在定義的時候沒全寫而調試了一上午!!!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章