設置 | 登錄 | 註冊

目前共有1篇帖子。

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

1樓 張樹人 2011-2-11 02:56
前言:
在上一篇學習了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(大寫)


可以看apache的版本是2.2.14,使用的MPM是prefork。
#sudo cat /etc/apache2/envars

可以看到運行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及端口號,默認情況是


*代表是本機上所有IP
(1)基於域名的虛擬主機
1-1.先把/etc/apache2/ports.conf改成以下內容:



1-2,建一個以www.labtest.com為域名的虛擬主機
$ cd sites-available/
$ sudo cp default  labtest
$sudo vim labtest


其它內容先暫不做修改
1-3,在/var/www下建labtest目錄,並新建一測試用的index.html
$sudo mkdir /var/www/labtest
$sudo vim /var/www/labtest/index.html

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 時,提示以下警告


解決方法是:在/etc/apache2/apache2.conf里加入
ServerName ubuntulab(本機的計算機名)

出現以下警告


解決方法是:


就是把<VirtualHoat 192.168.3.5>改成<VirtualHoat 192.168.3.5:80>
出現以下警告


這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中


這句配置是一定有的,如果沒有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時會出錯。

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或域名,會顯示不同的內容則成功。
在實驗過程中出現以下問題:


第一錯誤的解決方法是在/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文件為


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:808或http://www.labtest1.com:808
做實驗時發現在port.conf不可寫成


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


告訴你語法錯誤。
3,虛擬主機的配置文件,以一個虛擬主機為例。更多的指令可以閱讀http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/directives.html#A
<VirtualHost 192.168.3.5:808>
        ServerAdmin admin@labtest.com
#網站管理員的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服務相關配置,在這裏我只是學習了虛擬主機的實現,還有很多其它的配置及優化沒涉及。
 
 
 
本文出自 「匠人」 博客,請務必保留此出處http://xuchengji.blog.51cto.com/160472/387247

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。