OSWikiHK: 請協力 GPLv3 的中文翻譯工作。
配置 Apache 支援多個網域
OSWikiHK,自由中文開源知識庫
目录 |
何謂 Virtual Hosting?
Virtual Hosting 就是同一台伺服器可以同時處理超過一個網域(domain)。即是說,假設 www.example1.net 和 www.example2.net 兩個網域都指向同一部電腦,如果電腦上的網頁伺服器 (WWW Server) 支援 Virtual Hosting,那您用 www.example1.net 和 www.example2.net 去訪問同一個伺服器就可以取得不同的網站。
IP-based 和 Host-based Virtual Hosting
本身 Virtual Hosting 技術分 IP-based 和 Host-based。IP-based Virtual Hosting 是指運行網站伺服器的電腦有多個 IP 地址(IP Address),訪問不同的 IP 地址就可以取得不同的網站。Host-based Virtual Hosting 則是指在 DNS 上多個網域都是指向同一個 IP 地址,網頁瀏覽器(WWW Browser)透過 HTTP 協定告知網頁伺服器要訪問那個網站。
一來 IP-based Virtual Hosting 需要多 IP 地址,即每個網站都要多點成本,二來 Host-based Virtual Hosting 技術已有十年多,現存所有網頁瀏覽器和網頁伺服器都有支援,所以現時很少人會採用 IP-based Virtual Hosting。不過因為 TLS/SSL 技術限制了每一個 IP 地址只可以支援一張電子證書(Digital Certificate),所如果您要在同一部電腦使用多過一張電子證書,您仍然需要 IP-based Virtual Hosting。
當然您亦可以將 IP-based 及 Host-based Virtual Hosting 混合使用於同一台 Apache 網頁伺服器中。
Debian GNU/Linux 的 Apache 1.3.x
安裝 Debian 套件 apache:
# apt-get install apache
在 Apache 配置檔案 /etc/apache/httpd.conf 的尾部加入以下內容:
<VirtualHost *>
# 在 ServerName 後加上您的網站名稱
ServerName www.example.net
# 如果您想多個網站名稱都取得相同的網站,可以加在 ServerAlias 後加上其他網站別名。
# 別名間以空格間開。
ServerAlias web.example.net mail.example.net *.example.org
# 在 ServerAdmin 後加上網站管理員的電郵地址,方便別人有問題是可以聯絡網站管理員。
ServerAdmin webmaster@example.net
# 在 DocumentRoot 後加上存放網站內容的目錄路徑
DocumentRoot /var/www/www.examples.net
<Directory /var/www/www.examples.net>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Allow from all
</Directory>
ErrorLog /var/log/apache/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache/access.log combined
</VirtualHost>
記謹建立您在以上配置檔中所提到的目錄,例如 /var/www/www.examples.net 。
# mkdir /var/www/www.examples.net
檢查您的配置檔中是否有任何語法錯誤:
# apachectl configtest
重新啟動 Apache 。
# /etc/init.d/apache reload
Debian GNU/Linux 的 Apache2 (2.0.x)
安裝 Debian 套件 apache2:
# apt-get install apache2
在目錄 /etc/apache2/sites-available 建立一個新檔案(建議使用新站域名稱,例如 ”www.examples.net“)存放有關網站的設定:
<VirtualHost *>
# 在 ServerName 後加上您的網站名稱
ServerName www.examples.net
# 如果您想多個網站名稱都取得相同的網站,可以加在 ServerAlias 後加上其他網站別名。
# 別名間以空格間開。
ServerAlias web.examples.net mail.examples.net
# 在 ServerAdmin 後加上網站管理員的電郵地址,方便別人有問題是可以聯絡網站管理員。
ServerAdmin webmaster@examples.net
# 在 DocumentRoot 後加上存放網站內容的目錄路徑
DocumentRoot /var/www/www.examples.net
<Directory /var/www/www.examples.net>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
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
</VirtualHost>
使用 "a2ensite domainname" 啟動上面的配置檔。例如:
# a2ensite www.examples.net
記謹建立您在以上配置檔中所提到的目錄,例如 /var/www/www.examples.net 。
# mkdir /var/www/www.examples.net
檢查您的配置檔中是否有任何語法錯誤:
# apache2ctl configtest
重新啟動 Apache 。
# /etc/init.d/apache2 reload
Fedora Linux 或 Red Hat Linux 的 Apache
確定在 Apache 配置檔案 /etc/httpd/conf/httpd.conf 的"NameVirtualHost *"前的 "#" 已被刪去:
NameVirtualHost *:80
在 /etc/httpd/conf/httpd.conf 的尾部加入以下內容:
<VirtualHost *>
# 在 ServerName 後加上您的網站名稱
ServerName www.examples.net
# 如果您想多個網站名稱都取得相同的網站,可以加在 ServerAlias 後加上其他網站別名。
# 別名間以空格間開。
ServerAlias web.examples.net mail.examples.net
# 在 ServerAdmin 後加上網站管理員的電郵地址,方便別人有問題是可以聯絡網站管理員。
ServerAdmin webmaster@examples.net
# 在 DocumentRoot 後加上存放網站內容的目錄路徑
DocumentRoot /var/www/www.examples.net
<Directory /var/www/www.examples.net>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Allow from all
</Directory>
ErrorLog /var/log/httpd/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/access.log combined
ServerSignature On
</VirtualHost>
記謹建立您在以上配置檔中所提到的目錄,例如 /var/www/www.examples.net 。
# mkdir /var/www/www.examples.net
檢查您的配置檔中是否有任何語法錯誤:
# apachectl configtest
重新啟動 Apache 。
# /etc/init.d/httpd reload
Mandriva Linux 的 Apache 2.0.x
安裝 Mandriva 套件 apache-mpm-prefork:
# urpmi apache-mpm-prefork
確定在 Apache 配置檔案 /etc/httpd/conf/httpd.conf的 "NameVirtualHost *:80" 及 "Setenv VLOG" 前的 "#" 已被刪去:
NameVirtualHost *:80 Setenv VLOG
在目錄 /etc/httpd/conf/vhosts.d 建立一個新檔案 (建議使用新網站名稱,例如 ”www.examples.net“) 存放有關網站的設定:
<VirtualHost *>
# 在 ServerName 後加上您的網站名稱
ServerName www.examples.net
# 如果您想多個網站名稱都取得相同的網站,可以加在 ServerAlias 後加上其他網站別名。
# 別名間以空格間開。
ServerAlias web.examples.net mail.examples.net
# 在 ServerAdmin 後加上網站管理員的電郵地址,方便別人有問題是可以聯絡網站管理員。
ServerAdmin webmaster@examples.net
# 在 DocumentRoot 後加上存放網站內容的目錄路徑
DocumentRoot /var/www/www.examples.net
<Directory /var/www/www.examples.net>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Allow from all
</Directory>
ErrorLog /var/log/httpd/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/httpd/access.log combined
ServerSignature On
</VirtualHost>
記謹建立您在以上配置檔中所提到的目錄,例如 /var/www/www.examples.net 。
# mkdir /var/www/www.examples.net
重新啟動 Apache 。
# /etc/init.d/httpd reload
配置選項詳解
IP Alias
如果您需用使用 IP-based virtual hosting,您先需要利用 IP Alias 令您的 GNU/Linux 同時擁有超過一個IP地站,做法是以 root 身份鍵入指令 "ifconfig 介面:編號 IP地址",例如:
# ifconfig eth0:0 192.168.0.101
NameVirtualHost
NameVirtualHost選項的作用是告訴 Apache 那個 IP 地址所指的網絡介面入來的要求需要用 Host-based Virtual Hosting。即是當有由 NameVirtualHost 標示過網絡介面的要求入來時,Apache 會檢查要求標頭是否有 "Host:" 項目(標示了要訪問的網站名稱),並根據要訪問網站名稱決定採用那一組 <VirtualHost>...</VirtualHost> 的設定。NameVirutalHost 的語法是:
- NameVirtualHost IP地址[:埠]
例如:
NameVirutalHost 192.168.0.1 <VirtualHost 192.168.0.1> # ... </VirtualHost>
如果您要有多個網絡介面需要 Name-based 設定,請重覆多個 NameVirtualHost 選項標示所有網絡介面對應的IP地址。如果您想電腦所有網絡介面進來的要求都而要 Name-based Virtual Hosting,可以使用星號 "*" 代替IP地址:
NameVirtualHost *
要標示埠,可以:
NameVirtualHost *:8080
<VirtualHost>
<VirtualHost> 用作包著每個虚擬網站的設定。其語法為:
- <VirtualHost 地址[:埠] 地址[:埠] ...> ... </VirtualHost>
地址可以以下幾種
- 虚擬網站的 IP 地址
- 對應 IP 地址的 Full Qualified Domain Name
- * - 代表任何 IP 地址
- _default_ - 適用於未符合所有其他IP地址的設定
例如:
<VirtualHost 10.1.2.3> ServerAdmin webmaster@host.example.org DocumentRoot /www/docs/host.example.org ServerName host.example.net ErrorLog logs/host.example.net-error_log TransferLog logs/host.example.net-access_log </VirtualHost>

