Apache Virtual Host

Home Home
引用 | 編輯 johnroyer
2006-10-17 02:20
樓主
推文 x0
多注意的話
可以發現有些網址非常特別

www.google.com
mail.google.com
picasaweb.google.com


而且 ping 一下還會發現這些 DomainName 都連到同一個 IP
這就是 Apache Virtual Host 的功能啦
當然 Google 不是這樣做的啦………舉例而已

要啟動 Apache 的 Virtual Host 功能
首先開啟 /usr/local/etc/apache22/httpd.conf
在任意地方加入以下設定

複製程式
# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

由上面的設定可以看出
這一段會使 Apache 去讀取 extra/httpd-vhosts.conf
而 httpd-vhosts.conf 就是 Virtual Host 的設定檔

當然也可以直接寫在 http.conf 內
但是為了方便管理以及日後的維護
通常都會放在 extra/httpd-vhosts.conf


接下來看看 httpd-vhosts.conf 裡面寫了些什麼

複製程式
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:[url]http://httpd.apache.org/docs/2.2/vhosts/>[/url]
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

 VirtualHost example:
 Almost any Apache directive may go into a VirtualHost container.
 The first VirtualHost section is used for all requests that do not
 match a ServerName or ServerAlias in any <VirtualHost> block.

<VirtualHost *:80>
    ServerAdmin [email]webmaster@dummy-host.example.com[/email]
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ServerAlias [url]www.dummy-host.example.com[/url]
    ErrorLog /var/log/dummy-host.example.com-error_log
    CustomLog /var/log/dummy-host.example.com-access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email]webmaster@dummy-host2.example.com[/email]
    DocumentRoot /www/docs/dummy-host2.example.com
    ServerName dummy-host2.example.com
    ErrorLog /var/log/dummy-host2.example.com-error_log
    CustomLog /var/log/dummy-host2.example.com-access_log common
</VirtualHost>

可以看出每個不同的 vhost 都被包在標籤中
<VirtualHost *:80>
......
</VirtualHost>

參數說明:
ServerAdmin:此 vhost 的管理員電子郵件
DocumentRoot:連結到此 vhost 時,會以哪個目錄當作預設的根目錄
ServerName:vhost 的 DNS
ServerAlias:vhost 的 Alias
ErrorLog:對於這個 vhost 錯誤記錄檔的儲存位置
CustomLog:對於這個 vhost 記錄檔的儲存位置

設定好之後
別忘記將原本做為參考用的二個 vhost 刪除或設為註解
然後重新啟動 appachectl restart

//----------------------------------------------------------------

再補上一招管理密技
用的方法一樣是「include」
你把的所有 vhost 設定分別儲存成檔案存放在其他目錄

複製程式
NameVirtualHost *:80
<VirtualHost *:80>
        ServerAdmin [email]mail@mail.com[/email]
        DocumentRoot /usr/local/www/apache22/data/
        ServerName 192.168.0.1
        ErrorLog /var/log/httpd-error.log
        CustomLog /var/log/httpd-access.log combined

        <Directory />
        AllowOverride None
        Order Deny,Allow
        Deny from all
        </Directory>

        <Directory "/usr/local/www/apache22/data/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        </Directory>
</VirtualHost>

Include /usr/local/etc/apache22/vhosts/*.conf

然後其他的設定檔分別儲存到 /usr/local/etc/apache22/vhosts/
檔名為 vhost1.mychat.com.conf
    vhost2.mychat.com.conf



vhost1.mychat.com.conf:
複製程式
<VirtualHost *:80>
        ServerAdmin [email]mail1@mychat.com[/email]
        DocumentRoot /usr/local/www/apache22/data/vhost1/
        ServerName vhost1.mychat.com.conf
        ErrorLog /var/log/httpd-error.log
        CustomLog /var/log/httpd-access.log combined

        <Directory />
        AllowOverride None
        Order Deny,Allow
        Deny from all
        </Directory>

        <Directory "/usr/local/www/apache22/data/vhost1/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        </Directory>
</VirtualHost>





vhost2.mychat.com.conf
複製程式
<VirtualHost *:80>
        ServerAdmin [email]mail2@mychat.com[/email]
        DocumentRoot /usr/local/www/apache22/data/vhost2/
        ServerName vhost2.mychat.com.conf
        ErrorLog /var/log/httpd-error.log
        CustomLog /var/log/httpd-access.log combined

        <Directory />
        AllowOverride None
        Order Deny,Allow
        Deny from all
        </Directory>

        <Directory "/usr/local/www/apache22/data/vhost2/">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        </Directory>
</VirtualHost>


這樣管理上會方便許多

原文:Zeroplex 生活隨筆: FreeBSD Apache Virtual Host
http://zeroplex.blogspot.com/2008/05/freebsd-apache-virtual-host.html

請多指教

獻花 x0
引用 | 編輯 singulai
2008-09-01 11:02
1樓
  
解說清楚,實做簡單,感謝。

獻花 x0
引用 | 編輯 mnbmnb5266
2010-08-21 22:40
2樓
  
謝謝大大的程式分享,先看看管不管用再說

獻花 x0