Apache HTTP Server 版本2.2

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