<-
Apache > HTTP Server > 文件 > 第 2.4 版 > 模組

Apache 模組 mod_vhost_alias

可用語言:  en  |  fr  |  tr 

說明提供動態配置大量虛擬主機
狀態擴充
模組識別碼vhost_alias_module
原始檔mod_vhost_alias.c

摘要

此模組會建立動態配置的虛擬主機,方法是允許使用 HTTP 要求的 IP 位址和/或 Host: 標頭作為路徑名稱中的一部分,用來決定要提供哪些檔案。這樣可以輕鬆使用大量具有類似組態的虛擬主機。

注意

如果 mod_aliasmod_userdir 用於將 URI 翻譯成檔案名稱,它們會覆寫以下所述的 mod_vhost_alias 指令。例如,以下組態會在所有情況下將 /cgi-bin/script.pl 映射到 /usr/local/apache2/cgi-bin/script.pl

ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
VirtualScriptAlias "/never/found/%0/cgi-bin/"
Support Apache!

主題

指令

錯誤修正檢查表

另請參閱

top

目錄名稱內插

此模組中的所有指令會在路徑名稱中內插字串。內插的字串(以下稱之為「名稱」)可能是伺服器名稱(請參閱 UseCanonicalName 指令,以了解如何決定名稱的詳細資訊)或用點分十進位格式表示的伺服器上虛擬主機的 IP 位址。內插由受 printf 啟發的指定元控制,這些指定元有數種格式

%% 插入 %
%p 插入虛擬主機的埠號
%N.M 插入名稱的(部分)

NM 用於指定名稱的子字串。N 從名稱中以句點分隔的組成元件中選取;而 M 則選取 N 選取的內容內的字元。M 是選用的,如果不存在則預設為零;只有在 M 存在時,句點必須存在。解譯如下

0 完整名稱
1 第一個部分
2 第二個部分
-1 最後一個部分
-2 倒數第二部分
2+ 第二個和後續的所有部分
-2+ 倒數第二和所有先前的部分
1+-1+ 等同於 0

如果 NM 大過於可用部分的數量,則會內插一個底線。

top

範例

對於基於簡單名稱的虛擬主機,您可以在伺服器組態檔中使用下列指令

UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/apache/vhosts/%0"

針對 http://www.example.com/directory/file.html 的請求,將會由檔案 /usr/local/apache/vhosts/www.example.com/directory/file.html 滿足。

對於非常大量的虛擬主機,建議您安排檔案以減小 vhosts 目錄的大小。為此,您可以在您的組態檔中使用下列指令

UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2"

針對 http://www.domain.example.com/directory/file.html 的請求,將會由檔案 /usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html 滿足。

可以透過從名稱尾端雜湊的方式來達到檔案更平均的分布,例如

VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2"

範例請求會來自 /usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html

或者您也可以使用

VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+"

範例請求會來自 /usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html

使用者很常見的請求是能夠將多個網域指向多個文件根目錄,而不用擔心請求主機名稱的部分長度或數量。如果請求的主機名稱是 sub.www.domain.example.com 而非單純的 www.domain.example.com,則使用 %3+ 會導致文件根目錄成為 /usr/local/apache/vhosts/domain.example.com/...,而不是預期的 example.com 目錄。在這種情況下,使用組合 %-2.0.%-1.0 會很有幫助,它會總是產生網域名稱和頂層網域,例如 example.com,無論主機名稱附加了多少個子網域。因此,可以進行組態,將所有第一、第二或第三層級的子網域導向同一個目錄

VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"

在上述範例中,www.example.comwww.sub.example.comexample.com 都會指向 /usr/local/apache/vhosts/example.com

對於基於 IP 的虛擬主機,您可以在您的組態檔中使用下列指令

UseCanonicalName DNS
VirtualDocumentRootIP "/usr/local/apache/vhosts/%1/%2/%3/%4/docs"
VirtualScriptAliasIP  "/usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin"

如果 www.domain.example.com 的 IP 位址是 10.20.30.40,則針對 http://www.domain.example.com/directory/file.html 的請求會由檔案 /usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html 滿足。針對 http://www.domain.example.com/cgi-bin/script.pl 的請求會透過執行程式 /usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl 滿足。

若要讓 . 字元包含在 VirtualDocumentRoot 指令中,但它與 % 指令衝突,您可使用下列方式來解決此問題。

VirtualDocumentRoot "/usr/local/apache/vhosts/%2.0.%3.0"

http://www.domain.example.com/directory/file.html 中的請求會由 /usr/local/apache/vhosts/domain.example/directory/file.html 檔案滿足。

%V%ALogFormat 指令相當適用於此模組。

top

VirtualDocumentRoot 指令

說明針對已建置的虛擬主機動態設定文件根目錄的位置
語法VirtualDocumentRoot 內插目錄|none
預設值VirtualDocumentRoot none
內容伺服器設定、虛擬主機
狀態擴充
模組mod_vhost_alias

VirtualDocumentRoot 指令讓您可以根據伺服器名稱的數值來確認 Apache HTTP Server 在何處尋找文件。擴充 內插目錄 的結果可用來當作文件結構的根目錄,類似於 DocumentRoot 指令引數。如果 內插目錄none,則會關閉 VirtualDocumentRoot。此指令無法與 VirtualDocumentRootIP 使用在相同的內容中。

注意

VirtualDocumentRoot 會覆寫任何您放入相同內容或子內容中的 DocumentRoot 指令。如果在全域伺服器範圍中放入 VirtualDocumentRoot,會有效覆寫之後定義的任何虛擬主機中的 DocumentRoot 指令,除非您在各個虛擬主機中將 VirtualDocumentRoot 設定為 None
top

VirtualDocumentRootIP 指令

說明針對已建置的虛擬主機動態設定文件根目錄的位置
語法VirtualDocumentRootIP 內插目錄|none
預設值VirtualDocumentRootIP none
內容伺服器設定、虛擬主機
狀態擴充
模組mod_vhost_alias

VirtualDocumentRootIP 指令類似於 VirtualDocumentRoot 指令,不同點在於它會使用連線伺服器端的 IP 位址進行目錄內插,而非使用伺服器名稱。

top

VirtualScriptAlias 指令

說明針對已建置的虛擬主機動態設定 CGI 目錄的位置
語法VirtualScriptAlias 內插目錄|none
預設值VirtualScriptAlias none
內容伺服器設定、虛擬主機
狀態擴充
模組mod_vhost_alias

VirtualScriptAlias 指令可讓您設定 Apache httpd 尋找 CGI 腳本的位置,其與 VirtualDocumentRoot 尋找其他文件的設定方式類似。它會比對從 /cgi-bin/ 開始的 URI 要求,就像 ScriptAlias /cgi-bin/ 那樣。

top

VirtualScriptAliasIP 指令

說明針對已建置的虛擬主機動態設定 CGI 目錄的位置
語法VirtualScriptAliasIP 已內插目錄|無
預設值VirtualScriptAliasIP 無
內容伺服器設定、虛擬主機
狀態擴充
模組mod_vhost_alias

VirtualScriptAliasIP 指令會像 VirtualScriptAlias 指令那樣,但它會改用連線伺服器端的 IP 位址來內插目錄,而非使用伺服器名稱。

可用語言:  en  |  fr  |  tr 

top

留言

注意
這裡不是問答區段。張貼於此的留言應以改善文件或伺服器的建議為主,若您的留言已被採用或被視為無效/與主題無關,恕我們的版主會將其刪除。關於如何管理 Apache HTTP 伺服器的問題,請提問至我們在 Libera.chat 上的 IRC 頻道 #httpd,或傳送郵件至我們的郵件列表