a2ensite 站點名
a2dissite 站點名
安裝好apache之後默認有一個叫default的虛擬主機。新建虛擬主機時能夠直接複製默認虛擬主機的配置文件,在其基礎上修改新虛擬主機的配置參數。apache
#copy /etc/apache2/site-available/default /etc/apache2/site-available/sitename
咱們都知道,若是咱們想在單臺機器上設置多個域名或主機名時,咱們就要用到基於名稱的虛擬主機了。那麼要如何進行設置呢?這就是本文章想解決的問題了。在 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.example.com ServerAdmin admin@mail.example.com DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow 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 None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> 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> </VirtualHost>
下面咱們來分析一下上面這段設置中與虛擬主機有關的設置語句:ide
這樣咱們就配置了一個虛擬主機 www.firehare.com。但因爲這是缺省配置,因此在 Apache2 重啓以後,不管你輸入 DNS 服務器中指向這個主機的任何域名,都會被導向 www.firehare.com 這個缺省配置所指向的 /var/www 這個目錄的。除非該域名被其餘虛擬主機配置所用,好比咱們還配置了 edunuke.firehare.com 指向本機,且配置了相應的虛擬主機,這樣的話,輸入域名 edunuke.firehare.com 就會被對應該域名的目錄中。測試
爲了說明清楚 咱們再添加一個虛擬主機站點 example.com,首先到 /etc/apache2/sites-available/ 目錄中創建一個文件 edunuke,編輯該文件:spa
<VirtualHost *:80> ServerName edunuke.example.com ServerAdmin edunuke@mail.example.com DocumentRoot "/var/www/edunuke/" ErrorLog "/var/log/apache2/edunuke_errors.log" CustomLog "/var/log/apache2/edunuke_accesses.log" common </VirtualHost>
設置的具體含義同上面的類似,這是我就再也不多說了。而後再運行命令:操作系統
sudo a2ensite edunuke
注:我這裏會提示從新加載配置,按照提示信息執行便可使配置文件生效(通過本人測試,使用重啓apache的方式沒有成功加載配置文件):debug
這樣的話,虛擬主機站點 edunuke.example.com 就已經安裝好了。這時你也能夠在 /etc/apache2/sites-enabled/ 目錄中發現多了一個到 /etc/apache2/sites-available/edunuke 的軟連接。接下來就是將 Apache2 重啓來使虛擬主機站點運行起來:rest
sudo /etc/init.d/apache2 restart
這樣你在瀏覽器上輸入 edunuke.example.com 的話,就會被指向 /var/www/edunuke 目錄了,而輸入其餘指向本機的域名則都會指到缺省配置中的 /var/www 目錄中。熟悉 Apache2 的朋友會問爲何這樣麻煩,放在一個文件中不也是能夠嗎?爲何要用兩個文件呢?其實很簡單,由於若是我要對 edunuke 站點進行維護時,我只要運行命令:code
sudo a2dissite edunuke
sudo /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 rewrite
sudo a2enmod proxy
而後,添加虛擬主機站點 www.songchaoke.cn,同 edunuke 站點建立類似在/etc/apache2/sites-available/ 目錄中創建一個文件 plone。顯然這個文件名中是沒有 "." 或 "#" 這兩個字符的了。而後編輯該文件:
<VirtualHost www.songchaoke.cn:80> ServerName www.songchaoke.cn ServerAdmin francis@mail.songchaoke.cn ErrorLog "/var/log/apache2/plone_errors.log" CustomLog "/var/log/apache2/plone_accesses.log" common RewriteEngine on RewriteRule ^/(.*) http://127.0.0.1:8081/VirtualHostBase/http/www.songchaoke.cn:80/plone/VirtualHostRoot/$1 [L,P] <Proxy *> Order Deny,Allow Deny from all Allow from all </Proxy> </VirtualHost>
這樣就安裝好了 www.songchaoke.cn 虛擬主機站點,能夠在瀏覽器中地址欄中輸入 http://www.songchaoke.cn 就能夠重定向到站點去了。