啟用與停用網站的方法
a2ensite 網站名a2dissite 網站名
基於名字的(通過網域名稱來區分)的虛擬機器主機
安裝好apache以後預設有一個叫default的虛擬機器主機。建立虛擬機器主機時可以直接複製預設虛擬機器主機的設定檔,在其基礎上修改新虛擬機器主機的配置參數。
#copy /etc/apache2/site-available/default /etc/apache2/site-available/sitename
測試環境
作業系統:Ubuntu Server 12.04 LTS
測試機地址:10.39.6.59
測試機網域名稱:*.example.com
基本配置
我們都知道,如果我們想在單台機器上設定多個網域名稱或主機名稱時,我們就要用到基於名稱的虛擬機器主機了。那麼要如何進行設定呢?這就是本指南想解決的問題 了。在 Ubuntu 的 /etc/apache2/ 目錄下有個 Apache2 的主設定檔 apache2.conf。在該檔案中我們可以看到下欄欄位:
# Include the virtual host configurations:Include /etc/apache2/sites-enabled/[^.#]*(12.04版本裡無[^.#]*)
這行的意思表明該檔案包含了 /etc/apache2/sites-enabled/ 目錄中檔案名稱不含 "." 或 "#" 這兩個字元的所有檔案。而當我們列出該目錄的檔案時,發現只有一個 000-default 的軟連結檔案,實際串連的是 /etc/apache2/sites-available 目錄中的 default 檔案,不難看出該檔案的檔案名稱中並不包含 "." 或 "#"。所以這個檔案當然是要被設定檔 apache2.conf 所包含的了。開啟該檔案,發現它其實是一個虛擬機器主機的設定檔,不過由於該檔案中的虛擬機器主機為 *,所以它實際上是一個通用設定檔。如果我們要建立虛擬機器主機的話,那麼就要把該檔案改成如下所示:
<VirtualHost *:80>ServerName www.firehare.comServerAdmin admin@mail.firehare.comDocumentRoot /var/www/<Directory />Options FollowSymLinksAllowOverride None</Directory><Directory /var/www/>Options Indexes FollowSymLinks MultiViewsAllowOverride NoneOrder allow,denyAllow from all# This directive allows us to have apache2's default start page# in /apache2-default/, but still have / go to the right place# Commented out for Ubuntu#RedirectMatch ^/$ /apache2-default/</Directory>ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<Directory "/usr/lib/cgi-bin">AllowOverride NoneOptions ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all</Directory>ErrorLog /var/log/apache2/error.log# Possible values include: debug, info, notice, warn, error, crit,# alert, emerg.LogLevel warnCustomLog /var/log/apache2/access.log combinedServerSignature OnAlias /doc/ "/usr/share/doc/"<Directory "/usr/share/doc/">Options Indexes MultiViews FollowSymLinksAllowOverride NoneOrder deny,allowDeny from allAllow from 127.0.0.0/255.0.0.0 ::1/128</Directory></VirtualHost>
下面我們來分析一下上面這段設定中與虛擬機器主機有關的設定語句:
`NameVirtualHost :80`:表示我們要做的是一個基於名稱的虛擬機器主機,監聽的連接埠為80.
`<VirtualHost *:80> 和 </VirtualHost>`:表示在其中的是一個虛擬機器主機的配置。注意如果上面的欄位指定了連接埠號碼,這裡也要指定
`ServerName www.firehare.com`:設定虛擬機器主機的網域名稱,www.firehare.com可以是你註冊的任何網域名稱
`ServerAdmin admin@mail.firehare.com`:設定該虛擬機器主機網管員的郵件
`DocumentRoot /var/www/`:設定該虛擬機器主機的主目錄路徑
`ErrorLog /var/log/apache2/error.log`:設定該虛擬機器主機的出錯資訊
`CustomLog /var/log/apache2/access.log combined`:設定該虛擬機器主機的訪問資訊
這樣我們就配置了一個虛擬機器主機 www.firehare.com。但由於這是預設配置,所以在 Apache2 重啟之後,無論你輸入 DNS 伺服器中指向這個主機的任何網域名稱,都會被導向 www.firehare.com 這個預設配置所指向的 /var/www 這個目錄的。除非該網域名稱被其他虛擬機器主機配置所用,比如我們還配置了 edunuke.firehare.com 指向本機,且配置了相應的虛擬機器主機,這樣的話,輸入欄位名 edunuke.firehare.com 就會被對應該網域名稱的目錄中。
進一步說明
為了說明清楚 我們再添加一個虛擬機器主機網站 example.com,首先到 /etc/apache2/sites-available/ 目錄中建立一個檔案 edunuke,編輯該檔案:
<VirtualHost *:80>ServerName edunuke.example.comServerAdmin edunuke@mail.example.comDocumentRoot "/var/www/edunuke/"ErrorLog "/var/log/apache2/edunuke_errors.log"CustomLog "/var/log/apache2/edunuke_accesses.log" common </VirtualHost>
設定的具體含義同上面的相似,這是我就不再多說了。然後再運行命令:
sudo a2ensite edunuke
這樣的話,虛擬機器主機網站 edunuke.example.com 就已經安裝好了。這時你也可以在 /etc/apache2/sites-enabled/ 目錄中發現多了一個到 /etc/apache2/sites-available/edunuke 的軟連結。接下來就是將 Apache2 重啟來使虛擬機器主機網站運行起來:
sudo /etc/init.d/apache2 restart 這裡可以使用reload 重新載入
這樣你在瀏覽器上輸入 edunuke.example.com 的話,就會被指向 /var/www/edunuke 目錄了,而輸入其他指向原生網域名稱則都會指到預設配置中的 /var/www 目錄中。熟悉 Apache2 的朋友會問為什麼這樣麻煩,放在一個檔案中不也是可以嗎?為什麼要用兩個檔案呢?其實很簡單,因為如果我要對 edunuke 網站進行維護時,我只要運行命令:
sudo a2dissite edunukesudo /etc/init.d/apache2 restart
即可,這樣既可以維護 edunuke 這個網站,同時還不影響其他網站的正常運行。
進階配置
上面談了一下簡單的虛擬機器主機配置方法。這個基本上能滿足我們大部分的需要。但如果要是安裝 Zope+Plone 的話,上面的這點設定是遠遠不夠的,由於 Zope+Plone 結構所採用的連接埠並非是80連接埠,所以我們還得做連接埠重新導向。為了能夠做這個,我們得啟用 Rewrite 和 Proxy 兩個模組。啟用模組很簡單,同網站配置目錄一樣,在 Apache2 中也有兩個模組配置目錄:mods-available 和 mods-enabled。在 mods-available 目錄中的是所有可用的模組,而在 mods-enabled 目錄中的則是已被安裝到 Apache2 中的模組。由於在 mods-available 目錄中已經有了 Rewrite 和 Proxy 模組的配置引導檔案,所以只需要簡單地將其安裝到 Apache2 中即可。使用命令:
sudo a2enmod rewritesudo a2enmod proxy
然後,添加虛擬機器主機網站 plone.example.com,同 edunuke 網站建立相似在/etc/apache2/sites-available/ 目錄中建立一個檔案 plone。顯然這個檔案名稱中是沒有 "." 或 "#" 這兩個字元的了。然後編輯該檔案:
<VirtualHost plone.example.com:80>ServerName plone.example.comServerAdmin plone@mail.example.comErrorLog "/var/log/apache2/plone_errors.log"CustomLog "/var/log/apache2/plone_accesses.log" commonRewriteEngine onRewriteRule ^/(.*) http://127.0.0.1:8081/VirtualHostBase/http/plone.firehare.com:80/plone/VirtualHostRoot/$1 [L,P]<Proxy *>Order Deny,AllowDeny from allAllow from all</Proxy></VirtualHost>
這樣就安裝好了 plone.example.com 虛擬機器主機網站,可以在瀏覽器中地址欄中輸入 http://plone.example.com 就可以重新導向到 Zope+Plone 網站去了。