欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<-
Apache > HTTP Server > 文檔 > 版本2.2
   致謝 | 譯者聲明 | 本篇譯者:金步國(guó) | 本篇譯稿最后更新:2006年1月5日 | 獲取最新版本

配置段(容器)

配置文件中指令的作用范圍可能是整個(gè)服務(wù)器,也可能是特定的目錄、文件、主機(jī)、URL。本文闡述如何使用配置段(容器)以及.htaccess文件來改變配置指令的作用范圍。

top

配置段(容器)的類型

容器有兩種基本類型。大多數(shù)容器是針對(duì)各個(gè)請(qǐng)求的,包含于其中的指令僅對(duì)與該容器匹配的請(qǐng)求起作用,而容器<IfDefine>、<IfModule><IfVersion>僅在啟動(dòng)和重新啟動(dòng)中起作用,如果在啟動(dòng)時(shí)指定的條件成立,則其中的指令對(duì)所有的請(qǐng)求都有效,否則將被忽略。

<IfDefine>容器中的指令只有在httpd命令行中設(shè)定了特定的參數(shù)后才有效。下例中,只有在服務(wù)器用 httpd -DClosedForNow 方式啟動(dòng)時(shí),所有的請(qǐng)求才會(huì)被重定向到另一個(gè)站點(diǎn):

<IfDefine ClosedForNow>
Redirect / http://otherserver.example.com/
</IfDefine>

<IfModule>容器很相似,但是其中的指令只有當(dāng)服務(wù)器啟用特定的模塊時(shí)才有效(或是被靜態(tài)地編譯進(jìn)了服務(wù)器,或是被動(dòng)態(tài)裝載進(jìn)了服務(wù)器),注意,配置文件中該模塊的裝載指令LoadModule行必須在出現(xiàn)在此容器之前。這個(gè)容器應(yīng)該僅用于你希望無論特定模塊是否安裝,配置文件都能正常運(yùn)轉(zhuǎn)的場(chǎng)合;而不應(yīng)該用于容器中的指令在任何情況下都必須生效的場(chǎng)合,因?yàn)樗鼤?huì)抑制類似模塊沒找到之類的有用出錯(cuò)信息。

下例中,MimeMagicFiles指令僅當(dāng)mod_mime_magic模塊啟用時(shí)才有效。

<IfModule mod_mime_magic.c>
MimeMagicFile conf/magic
</IfModule>

<IfVersion>指令與<IfDefine><IfModule>很相似,但是其中的指令只有當(dāng)正在執(zhí)行的服務(wù)器版本與指定的版本要求相符時(shí)才有效。這個(gè)模塊被設(shè)計(jì)用于測(cè)試套件、以及在一個(gè)存在多個(gè)不同httpd版本的大型網(wǎng)絡(luò)中需要分別針對(duì)不同版本使用不同配置的情況。

<IfVersion >= 2.1>
# 僅在版本高于 2.1.0 的時(shí)候才生效
</IfVersion>

<IfDefine>、<IfModule>、<IfVersion>都可以在條件前加一個(gè)"!"以實(shí)現(xiàn)條件的否定,而且都可以嵌套以實(shí)現(xiàn)更復(fù)雜的配置。

top

文件系統(tǒng)和網(wǎng)絡(luò)空間

最常用的配置段是針對(duì)文件系統(tǒng)和網(wǎng)絡(luò)空間特定位置的配置段。首先必須理解文件系統(tǒng)和網(wǎng)絡(luò)空間這兩個(gè)概念的區(qū)別,文件系統(tǒng)是指操作系統(tǒng)所看見的磁盤視圖,比如,在Unix文件系統(tǒng)中,Apache會(huì)被默認(rèn)安裝到/usr/local/apache2 ,在Windows文件系統(tǒng)中,Apache會(huì)被默認(rèn)安裝到"C:/Program Files/Apache Group/Apache2"(注意:Apache始終用正斜杠而不是反斜杠作為路徑的分隔符,即使是在Windows中)。相反,網(wǎng)絡(luò)空間是網(wǎng)站被web服務(wù)器發(fā)送以及被客戶在瀏覽器中所看到的視圖。所以網(wǎng)絡(luò)空間中的路徑/dir/ 在Apache采用默認(rèn)安裝路徑的情況下對(duì)應(yīng)于Unix文件系統(tǒng)中的路徑/usr/local/apache2/htdocs/dir/ 。由于網(wǎng)頁(yè)可以從數(shù)據(jù)庫(kù)或其他地方動(dòng)態(tài)生成,因此,網(wǎng)絡(luò)空間無須直接映射到文件系統(tǒng)。

文件系統(tǒng)容器

<Directory><Files>指令與其相應(yīng)的正則表達(dá)式版本(<DirectoryMatch><FilesMatch>)一起作用于文件系統(tǒng)的特定部分。<Directory>配置段中的指令作用于指定的文件系統(tǒng)目錄及其所有子目錄,.htaccess文件可以達(dá)到同樣的效果。下例中,/var/web/dir1 及其所有子目錄被允許進(jìn)行目錄索引。

<Directory /var/web/dir1>
Options +Indexes
</Directory>

<Files>配置段中的指令作用于特定的文件名,而無論這個(gè)文件實(shí)際存在于哪個(gè)目錄。下例中的配置指令如果出現(xiàn)在配置文件的主服務(wù)器段,則會(huì)拒絕對(duì)位于任何目錄下的private.html的訪問。

<Files private.html>
Order allow,deny
Deny from all
</Files>

<Files><Directory>段的組合可以作用于文件系統(tǒng)中的特定文件。下例中的配置會(huì)拒絕對(duì) /var/web/dir1/private.html 、/var/web/dir1/subdir2/private.html 、/var/web/dir1/subdir3/private.html等任何 /var/web/dir1/ 目錄下private.html的訪問。

<Directory /var/web/dir1>
<Files private.html>
Order allow,deny
Deny from all
</Files>
</Directory>

網(wǎng)絡(luò)空間容器

<Location>指令與其相應(yīng)的正則表達(dá)式版本(<LocationMatch>)一起作用于網(wǎng)絡(luò)空間的特定部分。下例中的配置會(huì)拒絕對(duì)任何以"/private"開頭的URL路徑的訪問,比如:http://yoursite.example.com/private、http://yoursite.example.com/private123、http://yoursite.example.com/private/dir/file.html 等所有以"/private"開頭的URL路徑。

<Location /private>
Order Allow,Deny
Deny from all
</Location>

<Location>指令與文件系統(tǒng)無關(guān),下例演示了如何將特定的URL映射到Apache內(nèi)部的處理器mod_status ,而并不要求文件系統(tǒng)中確實(shí)存在server-status文件。

<Location /server-status>
SetHandler server-status
</Location>

通配符和正則表達(dá)式

<Directory>、<Files>、<Location>指令可以使用與C標(biāo)準(zhǔn)庫(kù)中的fnmatch類似的shell風(fēng)格的通配符。"*"匹配任何字符串,"?"匹配任何單個(gè)的字符,"[seq]"匹配seq序列中的任何字符,符號(hào)"/"不被任何通配符所匹配,所以必須顯式地使用。

如果需要更復(fù)雜的匹配,這些容器都有一個(gè)對(duì)應(yīng)的正則版本:<DirectoryMatch>、<FilesMatch>、<LocationMatch> ,可以使用與Perl兼容的正則表達(dá)式,以提供更復(fù)雜的匹配。但是還必須注意下面配置段的合并部分關(guān)于使用正則表達(dá)式會(huì)如何作用于配置指令的內(nèi)容。

下例使用非正則表達(dá)式的通配符來改變所有用戶目錄的配置:

<Directory /home/*/public_html>
Options Indexes
</Directory>

下例使用正則表達(dá)式一次性拒絕對(duì)多種圖形文件的訪問:

<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
Deny from all
</FilesMatch>

什么情況下用什么

選擇使用文件系統(tǒng)容器還是使用網(wǎng)絡(luò)空間容器其實(shí)很簡(jiǎn)單。當(dāng)指令應(yīng)該作用于文件系統(tǒng)時(shí),總是用<Directory><Files>;而當(dāng)指令作用于不存在于文件系統(tǒng)的對(duì)象時(shí),就用<Location>,比如一個(gè)由數(shù)據(jù)庫(kù)生成的網(wǎng)頁(yè)。

絕對(duì)不要試圖用<Location>去限制對(duì)文件系統(tǒng)中的對(duì)象的訪問,因?yàn)樵S多不同的網(wǎng)絡(luò)空間路徑可能會(huì)映射到同一個(gè)文件系統(tǒng)目錄,從而導(dǎo)致你的訪問限制被突破。比如:

<Location /dir/>
Order allow,deny
Deny from all
</Location>

上述配置對(duì)http://yoursite.example.com/dir/ 請(qǐng)求的確起作用。但是設(shè)想在一個(gè)不區(qū)分大小寫的文件系統(tǒng)中,這個(gè)訪問限制會(huì)被http://yoursite.example.com/DIR/ 請(qǐng)求輕易突破。而<Directory>指令才會(huì)真正作用于對(duì)這個(gè)位置的任何形式的請(qǐng)求。但是有一個(gè)例外,就是Unix文件系統(tǒng)中的符號(hào)連接(軟連接),符號(hào)連接可以使同一個(gè)目錄出現(xiàn)在文件系統(tǒng)中的多個(gè)位置。<Directory>指令將不重設(shè)路徑名而直接追蹤符號(hào)連接,因此,對(duì)于安全要求最高的,應(yīng)該用Options指令禁止對(duì)符號(hào)連接的追蹤。

不要認(rèn)為使用大小寫敏感的文件系統(tǒng)就無所謂了,因?yàn)橛泻芏喾椒ǹ梢詫⒉煌木W(wǎng)絡(luò)空間路徑映射到同一個(gè)文件系統(tǒng)路徑,所以,應(yīng)當(dāng)盡可能使用文件系統(tǒng)容器。但是也有一個(gè)例外,就是把訪問限制放在<Location />配置段中可以很安全地作用于除了某些特定URL以外的所有URL。

top

虛擬主機(jī)

<VirtualHost>容器作用于特定的虛擬主機(jī),為同一個(gè)機(jī)器上具有不同配置的多個(gè)主機(jī)提供支持。詳見虛擬主機(jī)文檔。

top

代理

<Proxy><ProxyMatch>容器中的指令僅作用于通過mod_proxy代理服務(wù)器訪問的、與指定URL匹配的站點(diǎn)。下例中的配置會(huì)拒絕通過代理服務(wù)器訪問cnn.com站點(diǎn)。

<Proxy http://cnn.com/*>
Order allow,deny
Deny from all
</Proxy>

top

允許使用哪些指令?

查閱指令的作用域,就可以知道哪些指令可以出現(xiàn)在哪些配置段中。從語(yǔ)法上看,允許在<Directory>段中使用的指令當(dāng)然也可以在<DirectoryMatch>、<Files><FilesMatch>、<Location>、<LocationMatch><Proxy>、<ProxyMatch>段中使用,但也有例外:

top

配置段的合并

配置段會(huì)按非常特別的順序依次生效,由于這會(huì)對(duì)配置指令的處理結(jié)果產(chǎn)生重大影響,因此理解它的流程非常重要。

合并的順序是:

  1. <Directory>(除了正則表達(dá)式)和.htaccess同時(shí)處理;(如果允許的話,.htaccess的設(shè)置會(huì)覆蓋<Directory>的設(shè)置)
  2. <DirectoryMatch>(和<Directory ~>)
  3. <Files><FilesMatch>同時(shí)處理
  4. <Location><LocationMatch>同時(shí)處理

除了<Directory>,每個(gè)組都按它們?cè)谂渲梦募谐霈F(xiàn)的順序被依次處理,而<Directory>(上面的第1組),會(huì)按字典順序由短到長(zhǎng)被依次處理。例如:<Directory /var/web/dir>會(huì)先于<Directory /var/web/dir/subdir>被處理。如果有多個(gè)指向同一個(gè)目錄的<Directory>段,則按它們?cè)谂渲梦募械捻樞虮灰来翁幚怼S?code class="directive">Include指令包含進(jìn)來的配置被視為按原樣插入到Include指令的位置。

位于<VirtualHost>容器中的配置段在外部對(duì)應(yīng)的段處理完畢以后再處理,這樣就允許虛擬主機(jī)覆蓋主服務(wù)器的設(shè)置。

當(dāng)請(qǐng)求是由mod_proxy處理的時(shí)候,<Proxy>容器將會(huì)在處理順序中取代<Directory>容器的位置。

后面的段覆蓋前面的相應(yīng)的段。

技術(shù)說明

其實(shí),在名稱翻譯階段(即用AliasesDocumentRoots來映射URL到文件系統(tǒng))之前,會(huì)有一個(gè)<Location>/<LocationMatch>的序列被處理,而在名稱翻譯結(jié)束后,這個(gè)序列的處理結(jié)果則被完全拋棄。

一些例子

這是一個(gè)演示合并順序的例子。如果這些指令都起作用,則會(huì)按 A > B > C > D >E 的順序依次生效。

<Location />
E
</Location>

<Files f.html>
D
</Files>

<VirtualHost *>
<Directory /a/b>
B
</Directory>
</VirtualHost>

<DirectoryMatch "^.*b$">
C
</DirectoryMatch>

<Directory /a/b>
A
</Directory>

在下面這個(gè)更具體的例子中,無論在<Directory>段中加了多少訪問限制,由于<Location>段將會(huì)被最后處理,從而會(huì)允許不加限制的對(duì)服務(wù)器的訪問,可見合并的順序是很重要的,千萬(wàn)小心!

<Location />
Order deny,allow
Allow from all
</Location>

# 這個(gè)<Directory>段將不會(huì)實(shí)際生效
<Directory />
Order allow,deny
Allow from all
Deny from badguy.example.com
</Directory>