Apache HTTP Server 版本2.2
說明 | 提供大批量虛擬主機的動態(tài)配置支持 |
---|---|
狀態(tài) | 擴展(E) |
模塊名 | vhost_alias_module |
源文件 | mod_vhost_alias.c |
本模塊通過將HTTP請求中的IP地址和/或"Host:
"頭內(nèi)容轉(zhuǎn)換為所要提供服務的文件路徑名來創(chuàng)建動態(tài)的虛擬主機配置。這樣的做法,使得應用配置大量相似的虛擬主機變得更為容易。
如果使用mod_alias
或mod_userdir
來將URI轉(zhuǎn)換為文件名,那么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/
本模塊中的所有指令都用于將字符串替換為路徑名。被替換的字符串(以后稱為"name")可以是服務器名(參見UseCanonicalName
指令以了解決策方法)或者是"點數(shù)字"格式的虛擬主機IP地址。替換操作由printf
格式修飾符控制,該修飾符有以下幾種格式:
%% | 插入一個百分號(% ) |
%p | 插入虛擬主機的端口號 |
%N.M | 插入名稱(或者名稱的一部分) |
N
和M
被用來指定name中的子字符串。N
從name中用小數(shù)點分隔的某部分中選取,而M
是從N
選中的字符串中選取部分字符。M
是可選的且默認為"0";小數(shù)點當且僅當M
存在時才必須書寫。替換操作如下:
0 | 整個name |
1 | 第一部分 |
2 | 第二部分 |
-1 | 最后一部分 |
-2 | 倒數(shù)第二部分 |
2+ | 從第二部分開始到最后的所有部分 |
-2+ | 倒數(shù)第二部分以及之前的各部分 |
1+ 和-1+ | 等同于0 |
如果N
或M
大于部分的個數(shù),則簡單的用下劃線來替換。
對于一個簡單的基于名稱的虛擬主機,配置文件中可能會使用下面的指令:
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
進一步的分割可以用name尾字符來索引(hashing),例如:
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
對于基于IP地址的虛擬主機,可以這樣配置:
UseCanonicalName DNS
VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs
VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
對http://www.domain.example.com/directory/file.html
的請求將會返回文件/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html
,這里假設www.domain.example.com
的IP地址為10.20.30.40。對http://www.domain.example.com/cgi-bin/script.pl
的請求將會執(zhí)行程序/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl
如果你希望在VirtualDocumentRoot
指令中包含點字符(.
),但這又和%
指令產(chǎn)生沖突,可以這樣解決:
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
LogFormat
指令的%V
和%A
在和本模塊的協(xié)同中起了一定作用。
說明 | 對于給定的基于名稱的虛擬主機動態(tài)配置根文檔目錄 |
---|---|
語法 | VirtualDocumentRoot interpolated-directory|none |
默認值 | VirtualDocumentRoot none |
作用域 | server config, virtual host |
狀態(tài) | 擴展(E) |
模塊 | mod_vhost_alias |
VirtualDocumentRoot
指令使Apache可以通過虛擬主機的域名找到相應的文檔。擴展interpolated-directory所得到的目錄將會作為虛擬主機的根目錄,這和DocumentRoot
指令的參數(shù)是一樣的。如果interpolated-directory為none
,那么VirtualDocumentRoot
將被關閉。該指令不能和VirtualDocumentRootIP
指令在同一作用域中使用。
說明 | 對于給定的基于IP的虛擬主機動態(tài)配置根文檔目錄 |
---|---|
語法 | VirtualDocumentRootIP interpolated-directory|none |
默認值 | VirtualDocumentRootIP none |
作用域 | server config, virtual host |
狀態(tài) | 擴展(E) |
模塊 | mod_vhost_alias |
VirtualDocumentRootIP
與VirtualDocumentRoot
相似,只是替換操作時用的不是虛擬主機名稱,而是IP地址。
說明 | 對于給定的基于名稱的虛擬主機動態(tài)配置CGI目錄 |
---|---|
語法 | VirtualScriptAlias interpolated-directory|none |
默認值 | VirtualScriptAlias none |
作用域 | server config, virtual host |
狀態(tài) | 擴展(E) |
模塊 | mod_vhost_alias |
VirtualScriptAlias
指令使Apache確定何處存放的是CGI腳本,這和VirtualDocumentRoot
的做法是一樣的。它匹配請求中的以/cgi-bin/
開始的URI,更像"ScriptAlias
/cgi-bin/
"的作用。
說明 | 對于給定的基于IP的虛擬主機動態(tài)配置CGI目錄 |
---|---|
語法 | VirtualScriptAliasIP interpolated-directory|none |
默認值 | VirtualScriptAliasIP none |
作用域 | server config, virtual host |
狀態(tài) | 擴展(E) |
模塊 | mod_vhost_alias |
VirtualScriptAliasIP
和VirtualScriptAlias
相似,只是替換操作使用的不是虛擬主機名稱,而是IP地址。