Apache HTTP Server 版本2.2
說明 | 提供基于主機名、IP地址、請求特征的訪問控制 |
---|---|
狀態(tài) | 基本(B) |
模塊名 | authz_host_module |
源文件 | mod_authz_host.c |
兼容性 | 僅在 Apache 2.1 及以后的版本中可用 |
mod_authz_host
提供的指令用在<Directory>
, <Files>
, <Location>
段中,也用于.htaccess
文件中控制對服務(wù)器特定部分的訪問。只要能在環(huán)境變量中捕獲到主機名、IP地址或其他的客戶端請求特征,就可以基于這些特征對訪問進行控制。Allow
和Deny
指令用于指出允許哪些客戶及不允許哪些客戶訪問服務(wù)器,而Order
指令設(shè)置默認的訪問狀態(tài)并配置Allow
和Deny
指令怎樣相互作用。
基于主機的訪問控制和基于口令的身份驗證兩套機制可以同時實現(xiàn)。在這種情況下,Satisfy
指令用來決定兩套機制如何相互作用。
一般來說,訪問控制指令適用于所有的訪問方法(GET
, PUT
, POST
等)。在多數(shù)情況下這是一個被期望的特性。但是,只限制某些方法而對其他方法不加限制也是可能的:通過把指令放到一個<Limit>
段中即可。
說明 | 控制哪些主機能夠訪問服務(wù)器的該區(qū)域 |
---|---|
語法 | Allow from all|host|env=env-variable [host|env=env-variable] ... |
作用域 | directory, .htaccess |
覆蓋項 | Limit |
狀態(tài) | 基本(B) |
模塊 | mod_authz_host |
Allow
指令控制哪些主機可以訪問服務(wù)器的該區(qū)域?梢愿鶕(jù)主機名、IP地址、 IP地址范圍或其他環(huán)境變量中捕獲的客戶端請求特性進行控制。
這個指令的第一個參數(shù)總是"from
",隨后的參數(shù)可以有三種不同形式:如果指定"Allow from all
",則允許所有主機訪問,按照下述Deny
和Order
指令的配置。若要只允許特定的主機或主機群訪問服務(wù)器,host可以用下面任何一種格式來指定:
Allow from apache.org
Allow from .net example.edu
主機名與給定字符串匹配或者以給定字符串結(jié)尾的主機允許訪問。只有完整的名字組成部分才被匹配,因此上述例子將匹配foo.apache.org
但不能匹配fooapache.org
。這樣的配置將導(dǎo)致Apache不管HostnameLookups
指令是如何設(shè)置的,對一個對客戶IP地址都要執(zhí)行兩次DNS查詢:一次正查詢保證IP沒有偽造,一次反查詢保證主機名沒有偽造。只有兩次查詢的結(jié)果都吻合,并且主機名能夠被匹配,訪問才被允許。
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205
允許擁有這些IP地址的主機進行訪問。
Allow from 10.1
Allow from 10 172.20 192.168.2
IP地址的開始1到3個字節(jié),用于子網(wǎng)限制。
Allow from 10.1.0.0/255.255.0.0
一個網(wǎng)絡(luò)"a.b.c.d"和一個掩碼"w.x.y.z",用于更精確的子網(wǎng)限制。
Allow from 10.1.0.0/16
同前一種情況相似,除了掩碼由nnn個高位字節(jié)構(gòu)成。
注意以上例子中的后三個匹配完全相同的一組主機。
IPv6地址和IPv6子網(wǎng)可以像下面這樣指定:
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
Allow
指令的第三種參數(shù)格式允許對服務(wù)器的訪問由環(huán)境變量的一個擴展指定。指定"Allow from env=env-variable
"時,如果環(huán)境變量env-variable存在則訪問被允許。使用由mod_setenvif
提供的指令,服務(wù)器用一種基于客戶端請求的彈性方式提供了設(shè)置環(huán)境變量的能力。因此,這條指令可以用于允許基于像User-Agent
(瀏覽器類型)、Referer
或其他HTTP請求頭字段的訪問。
SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=let_me_in
</Directory>
這種情況下,發(fā)送以KnockKnock/2.0
開頭的用戶代理標(biāo)示的瀏覽器將被允許訪問,而所有其他瀏覽器將被禁止訪問。
說明 | 控制哪些主機被禁止訪問服務(wù)器 |
---|---|
語法 | Deny from all|host|env=env-variable [host|env=env-variable] ... |
作用域 | directory, .htaccess |
覆蓋項 | Limit |
狀態(tài) | 基本(B) |
模塊 | mod_authz_host |
這條指令允許基于主機名、IP地址或者環(huán)境變量限制對服務(wù)器的訪問。Deny
指令的參數(shù)設(shè)置和Allow
指令完全相同。
說明 | 控制默認的訪問狀態(tài)與Allow 和Deny 指令生效的順序 |
---|---|
語法 | Order ordering |
默認值 | Order Deny,Allow |
作用域 | directory, .htaccess |
覆蓋項 | Limit |
狀態(tài) | 基本(B) |
模塊 | mod_authz_host |
Order
指令控制默認的訪問狀態(tài)與Allow
和Deny
指令生效的順序。Ordering取值范圍是以下幾種范例之一:
Deny,Allow
Deny
指令在Allow
指令之前被評估。默認允許所有訪問。任何不匹配Deny
指令或者匹配Allow
指令的客戶都被允許訪問。Allow,Deny
Allow
指令在Deny
指令之前被評估。默認拒絕所有訪問。任何不匹配Allow
指令或者匹配Deny
指令的客戶都將被禁止訪問。Mutual-failure
Allow
列表并且不出現(xiàn)在Deny
列表中的主機才被允許訪問。這種順序與"Order Allow,Deny
"具有同樣效果,不贊成使用。關(guān)鍵字只能用逗號分隔;它們之間不能有空格。注意在所有情況下每個Allow
和Deny
指令語句都將被評估。
在下面的例子中,apache.org域中所有主機都允許訪問,而其他任何主機的訪問都將被拒絕。
Order Deny,Allow
Deny from all
Allow from apache.org
下面例子中,apache.org域中所有主機,除了foo.apache.org子域包含的主機被拒絕以外,其他都允許訪問。而所有不在apache.org域中的主機都不允許訪問,因為默認狀態(tài)是拒絕對服務(wù)器的訪問。
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
另一方面,如果上個例子中的Order
指令改變?yōu)?Deny,Allow
",將允許所有主機的訪問。這是因為,不管配置文件中指令的實際順序如何,"Allow from apache.org
"指令會最后被評估到并覆蓋之前的"Deny from foo.apache.org
"。所有不在apache.org
域中的主機也允許訪問是因為默認狀態(tài)被改變到了允許。
即使沒有伴隨Allow
和Deny
指令,一個Order
指令的存在也會影響到服務(wù)器上某一個部分的訪問,這是由于它對默認訪問狀態(tài)的影響。例如:
<Directory /www>
Order Allow,Deny
</Directory>
這樣將會禁止所有對/www
目錄的訪問,因為默認狀態(tài)將被設(shè)置為拒絕。
Order
指令只在服務(wù)器配置的每個段內(nèi)部控制訪問指令的處理。這暗示著,例如,一個在<Location>
段中出現(xiàn)的Allow
或Deny
指令總是將會在一個<Directory>
段或者.htaccess
文件中出現(xiàn)的Allow
或Deny
指令之后被評估,而不管Order
指令如何設(shè)置。要了解配置段落合并的詳細信息,參見配置段文檔。