ubuntu server 10.4下Apache2的三種虛擬主機的實現

前言:

在上一篇學習了LAMP安裝後,想較深入的學習下Apache,http://www.apache.org/是她的官方網站,http://httpd.apache.org/docs/2.2/這是官方的手冊,http://lamp.linux.gov.cn/Apache/ApacheMenu/index.html這是中文的手冊。這裏就不再說安裝了,只學習相關的配置。什麼是虛擬主機?它的優點有哪些?主要應用在哪裏?可以看一下“百度百科”http://baike.baidu.com/view/7383.htm?fr=ala0_1_1

引用百度百科:虛擬主機的關鍵技術在於,即使在同一臺硬件、同一個操作系統上,運行着爲多個用戶打開的不同的服務器程式,互不干擾。而各個用戶擁有自己的一部分系統資源(IP地址、文檔存儲空間、內存、CPU時間等)。虛擬主機之間完全獨立,在外界看來,每一臺虛擬主機和一臺單獨的主機的表現完全相同。所以這種被虛擬化的邏輯主機被形象的稱爲“虛擬主機”。

虛擬主機還有一兄弟叫“虛擬機”,它的產品有:全球首款中國人自己設計的高速虛擬機VMLite(創始人駱輝紅博士);VMware的相關產品VMware Workstation,VMware Server等;微軟的Virtual pc ,Hyper-V;開源的VirtualBox,OpenVZ;紅帽企業級虛擬化RHEV;KVM等。感興趣的可以去http://www.xuniji.com/forum/看看。

但是,虛擬主機與虛擬機是不同的東西,不要混淆了。

操作:

1,Apache的配置文件

(1)apache的相關信息,通過apache2 命令,可以瞭解一些apache的信息

學習apache2的用法

#man apache2

#apache2 –V(大寫)

apache01

可以看apache的版本是2.2.14,使用的MPM是prefork。

#sudo cat /etc/apache2/envars

apache02

可以看到運行apache的用戶和組是www-data。

(2)apache2的相關配置文件在/etc/apache2下

apache2.conf 是全局配置文件,也是主配置文件

conf.d 一般性的配置

envvars 存放環境變量

httpd.conf 用戶配置文件

mods-available 已安裝的可用模塊

mods-enabled 已啓用的模塊

ports.conf httpd服務的端口號

sites-available 可用的虛擬主機

sites-enabled 啓用的虛擬主機

(3)apache的模塊的啓用和禁止

啓用一個模塊

#sudo a2enmod 模塊名

禁止一個模塊

#sudo a2dismod 模塊名

搜索想要的模塊

#sudo apt-cache search libapache2-mod

找到想要的模塊後,用以下命令安裝

#sudo apt-get install 模塊名

在/etc/apache2/mods-available 是已安裝的可用模塊,/etc/apache2/mods-enabled 是已啓用的模塊

(4)啓用和禁止虛擬站點

啓用一個站點

#sudo a2ensite 站點名

禁止一個站點

#sudo a2dissite 站點名

(5)apache的網頁放到哪了?

默認在/var/www目錄下,可以通過DocumentRoot關鍵字定義你想存放的位置,這個在虛擬主機定義時就會用到,安裝完以後只有一個有效虛擬主機/etc/apache2/sites-available/default,也是在這個文件裏定義DocumentRoot,這個根據自己的需要進行合理的規劃。

2,虛擬主機,可以參考http://lamp.linux.gov.cn/Apache/ApacheMenu/vhosts/index.html中關於虛擬主機的講解。

有三種方式實現虛擬主機,一是基於同一IP,不同端口的虛擬主機;二是同一端口,不同IP的虛擬主機;三是基於同一IP,同一端口,不同名字的虛擬主機。但是由於SSL協議先天特性決定了基於域名的虛擬主機無法成爲SSL安全服務器,所以想使用SSL的,就不能用基於主機名的虛擬主機。

與虛擬主機有關係的一個文件那就是ports.conf,因爲它定義了httpd服務要監聽IP及端口號,默認情況是

apache03

*代表是本機上所有IP

(1)基於域名的虛擬主機

1-1.先把/etc/apache2/ports.conf改成以下內容:

apache07

1-2,建一個以www.labtest.com爲域名的虛擬主機

$ cd sites-available/
$ sudo cp default  labtest

$sudo vim labtest

apache08

其它內容先暫不做修改

1-3,在/var/www下建labtest目錄,並新建一測試用的index.html

$sudo mkdir /var/www/labtest

$sudo vim /var/www/labtest/index.html

apache09

1-4,啓用虛擬主機labtest

$sudo a2ensite labtest

$sudo /etc/init.d/apache2 reload

1-5,在一測試機上如下設置,因爲這裏沒有配置DNS,如果DNS配置好了,就把測試機上的DNS服務器指到相應的DNS上。

如果是在ubuntu系統上測試,則:

$sudo vim /etc/hosts

添加以下內容

192.168.3.5        www.labtest.com

如果是在windows xp 上測試,則:

在c:\WINDOWS\system32\drivers\etc\hosts裏添加

192.168.3.5        www.labtest.com

在瀏覽器中輸入http://www.labtest.com,看是否顯示labtest1,若是則成功。

在做實驗過程中出現以下問題 :

重新reload 時,提示以下警告

apache10

解決方法是:在/etc/apache2/apache2.conf里加入

ServerName ubuntulab(本機的計算機名)

出現以下警告

apache11

解決方法是:

apache08

就是把<VirtualHoat 192.168.3.5>改成<VirtualHoat 192.168.3.5:80>

出現以下警告

apache06

這phpmyadmin引起的錯誤,

解決方法:

在/etc/apache2/apache2.conf 中去掉

Include /etc/phpmyadmin/apache.conf

http://ubuntuforums.org/archive/index.php/t-829124.html中有對這個問題的討論,在上篇關於LAMP的安裝中,就發現不加這句配置,phpmyadmin也是可以成功運行。

/etc/apache2/conf.d/phpmyadmin.conf是/etc/phpmyadmin/apache.conf的一個鏈接文件。

在/etc/apache2/conf.d/phpmyadmin.conf中

apache12

這句配置是一定有的,如果沒有phpmyadmin是不能成功運行的。

(2)基於不同IP,同端口的虛擬主機

2-1,給網卡eth0配置第二個IP地址

$sudo ifconfig eth0:0 192.168.3.51 netmask 255.255.255.0 broadcast 192.168.3.255 up

2-2,把/etc/apache2/ports.conf中的NameVirtualHost 給註釋掉,否則在重啓apache2時會出錯。

apache15

2-3,修改站點配置文件default,labtest,在/etc/apache2/sites-available目錄下

default的配置改爲:<VirtualHoat 192.168.3.5>

labtest的配置改爲:<VirtualHoat 192.168.3.51>

其它配置不變。

2-4,啓動虛擬主機,重新載入 apache服務器

$sudo a2ensite default

$sudo a2ensite labtest

$sudo /etc/init.d/apache2 reload

2-5,配置DNS服務器或在hosts文件中做相應的修改

192.168.3.5  www.lab.com

192.168.3.51   wwww.labtest.com

在瀏覽器中不同的輸入IP或域名,會顯示不同的內容則成功。

在實驗過程中出現以下問題:

apache14

第一錯誤的解決方法是在/etc/hosts裏添加

192.168.3.51 ubuntulab(本機的計算機名)

因爲192.168.3.51是後面添加的IP,沒有解析到主機名

第二個警告的解決方法是:有一個虛擬主機也採用了192.168.3.5的IP ,引起了IP地址的重複,查看/etc/sites-enabled下啓用的虛擬主機採用的IP地址是否與192.168.3.5重複,若是則改爲其它IP即可。

第三個警告是由於沒有把/etc/apache2/ports.conf中的NameVirtualHost 給註釋掉引起的,該配置只用於基於域名的虛擬主機。

(3)基於不同端口,同IP的虛擬主機

3-1,修改/etc/apache2/ports.con文件爲

apache004

3-2,修改站點配置文件default,labtest,在/etc/apache2/sites-available目錄下

default的配置改爲:<VirtualHoat 192.168.3.5:80>

labtest的配置改爲:<VirtualHoat 192.168.3.5:808>

3-3,啓動虛擬主機,重新載入 apache服務器

$sudo a2ensite default

$sudo a2ensite labtest

$sudo /etc/init.d/apache2 reload

3-4,測試

在瀏覽器裏訪問時就要加上端口號如:

http://192.168.3.5

http://192.168.3.5:808http://www.labtest1.com:808

做實驗時發現在port.conf不可寫成

apache003 或Listen 80,808

前者重新載入apache2時不會出現錯誤信息,但是訪問是不成功的,後者會出現如下錯誤信息

apache002

告訴你語法錯誤。

3,虛擬主機的配置文件,以一個虛擬主機爲例。更多的指令可以閱讀http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/directives.html#A

<VirtualHost 192.168.3.5:808>
        ServerAdmin [email protected]

#網站管理員的EMAIL郵件地址
        DocumentRoot /var/www/labtest1

#網站的根目錄,一般要設置爲絕對的路徑,否則將認爲它的父目錄爲在/etc/apache2/apache2.conf裏ServerRoot指定的路徑
#       ServerName www.labtest1.net

#在設置基於域名虛擬主機時,指定虛擬主機的域名
        <Directory />
                Options FollowSymLinks

#FollowSymLinks,允許在些目錄中使用符號鏈接
                AllowOverride None

#AllowOverride ,是針對.htaccess文件的。其值有all,none,AuthConfig,FileInfo,Indexes,Limit
        </Directory>
        <Directory /var/www/labtest1>
                Options Indexes FollowSymLinks MultiViews

#MultiViews,允許內容協商的多重視圖。內容協商由mod_negotiation模塊生成。
                AllowOverride None
                Order allow,deny

#Order:指定對目錄的訪問控制及allow,deny的生效順序。如果是allow,deny則是allow先於deny生效,默認拒絕所有訪問,任何不匹配allow或是匹配deny的訪問都被拒絕;如果是deny,allow則是deny先於allow生效,默認是允許所有訪問,任何不匹配deny或是匹配allow的訪問都被允許訪問。
                allow from all

#allow:控制哪些主機可以訪問,from是固有的,後面可以是主機名,IP地址,IP範圍,域名等。例:

#allow from labtest.com

#allow from .labtest.com

#allow from 192.168.3.5/255.255.255.0

#allow from 192.168.3.5/24

#allow from 192.168.3.100 192.168.3.101

#
        </Directory>
        ScriptAlias /cgi-bin/ /var/www/labtest1/cgi-bin/

# ScriptAlias:它標明/var/www/labtest1/cgi-bin目錄下只有CGI腳本,同時與Alias一樣用於在URL和文件系統路徑之間實現映射,使不在DocumentRoot目錄下的內容也能成爲文檔樹的一部分
        <Directory "/var/www/labtest1/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

#ExecCGI:允許該目錄下通過mod_cgi執行CGI腳本

#SymLinksIfOwnerMatch:只允許使用與目標目錄或文件的擁有者具有相同的USERID的符號鏈接

#+與-:一般來說,在一個目錄上設置了多次的Options,則最特殊的一個會被完全接受,而其他的則會被忽略;然而,加上+或-時,所有帶+的選項將強制覆蓋當前的設置,所有帶-的選項將強制從當前設置中去除。
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog /var/log/apache2/labtest1/error.log

#定義錯誤的日誌:在/var/log/apache2下一定要事先建好labtest1的目錄,否則會出錯。
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

#LogLevel:定義日誌的級別

#emerg 緊急

#alert 必須立即採取措施

#crit 致命的情況

#error 錯誤

#warn 警告

#notice 重要

#info 普通

#debug 調試

        CustomLog /var/log/apache2/labtest1/access.log combined

#CustomLog:指令用來對服務器的請求進行日誌記錄。combined第二個參數指定了寫入日誌文件的內容

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/acces_log combined

可參考http://httpd.apache.org/docs/1.3/logs.html
        ServerSignature On

#ServerSignature:指令允許您配置服務器端生成文檔的頁腳(錯誤信息、     mod_proxy的ftp目錄列表、

mod_info的輸出)。有三個值:On,Off,Email;on會簡單的增加一行關於服務器版本和正在伺服的虛擬主機的ServerName;Off 設置沒有錯誤行(這樣便與Apache1.2及更舊版本兼容;EMail 設置會如文檔中說明的那樣額外創建一個指向ServerAdmin的"mailto:"部分。對於2.0.44以後的版本,顯示的詳細服務器版本號將由ServerTokens指令控制。

    Alias /files/ "/var/www/labtest1/files/"

#Alias:使不在DocumentRoot目錄下的內容也能成爲文檔樹的一部分,也叫虛擬目錄。值得注意的是/files/與/files是有區別的,在此你有/,那麼在訪問時也一定要有/。訪問都必須要知道有這個別名,才能訪問。例:http://192.168.3.5:808/files/,如果沒有寫/files/是不能訪問的。
    <Directory "/var/www/labtest1/files/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
#        Deny from all
         Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>
 

結束語:

三種實現虛擬主機的方法中涉及到/etc/apache2目錄下三個文件ports.conf httpd服務的端口號,sites-available 可用的虛擬主機,sites-enabled 啓用的虛擬主機;ports.conf在三種方式下要做相應的修改,NameVirtualHost只在基於域名虛擬主機用到。做web服務器必然涉及到DNS服務相關配置,在這裏我只是學習了虛擬主機的實現,還有很多其它的配置及優化沒涉及。

 

 

 

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