Ubuntu配置Apache虛擬主機

啓用與停用站點的方法

a2ensite 站點名
a2dissite 站點名

基於名字的(經過域名來區分)的虛擬主機

安裝好apache之後默認有一個叫default的虛擬主機。新建虛擬主機時能夠直接複製默認虛擬主機的配置文件,在其基礎上修改新虛擬主機的配置參數。apache

#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.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

  • `NameVirtualHost :80`:表示咱們要作的是一個基於名稱的虛擬主機,監聽的端口爲80.
  • `<VirtualHost *:80> 和 </VirtualHost>`:表示在其中的是一個虛擬主機的配置。注意若是上面的字段指定了端口號,這裏也要指定
  • `ServerName www.example.com`:設置虛擬主機的域名
  • `ServerAdmin admin@mail.example.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,編輯該文件: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

QQ截圖20131025111754

這樣的話,虛擬主機站點 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 就能夠重定向到站點去了。

相關文章
相關標籤/搜索