Apache 2 2配置段和容器

2021-08-22 09:04:41 字數 4661 閱讀 5559

「配置段」和「容器」都是用來指定配置檔案的作用範圍的。配置檔案中指令的作用範圍可能是整個伺服器,也可能是特定的目錄、檔案、主機、url。本節將要介紹的是如何使用配置段及.htaccess檔案來改變配置指令的作用範圍。

1.配置段和容器的型別

配置段的型別

包括在core、mod_version和mod_proxy 3個模組中,可以使用的指令包括:、、、、、、、、、、和。這些指令都是配置段的容器。

容器有兩種基本型別。大多數容器是針對各個請求的,包含於其中的指令僅對與該容器匹配的請求起作用,而容器、、僅在啟動和重新啟動時起作用,如果在啟動時指定的條件成立,則其中的指令對所有的請求都有效,否則將被忽略。

容器中的指令只有在httpd命令列中設定了特定的引數後才有效。下面的示例中限定只有在伺服器用httpd -dclosedfornow 方式啟動時,所有的請求才會被重定向到另乙個站點:

redirect /

容器與很相似,但是其中的指令只有當伺服器啟用特定的模組時才有效(或是被靜態地編譯進了伺服器,或是被動態裝載進了伺服器)。注意,配置檔案中該模組的裝載指令loadmodule行必須出現在此容器之前。這個容器應該僅用於無論特定模組是否安裝,配置檔案都能正常運轉的場合;而不應該用於容器中的指令在任何情況下都必須生效的場合,因為它會抑制類似模組沒找到之類的有用出錯資訊。

下面的示例中,指定mimemagicfiles指令僅當mod_mime_magic模組啟用時才有效。

mimemagicfile conf/magic

指令與和也很相似,但是其中的指令只有當正在執行的伺服器版本與指定的版本要求相符時才有效。這個模組被設計用於測試套件,以及在乙個存在多個不同httpd版本的大型網路中需要針對不同版本使用不同配置的情況。

= 2.1>

#僅在版本高於2.1.0

的時候才生效

、、都可以在條件前加乙個「!」符號以實現條件的否定,而且都可以巢狀以實現更複雜的配置。

2.檔案系統和網路空間

最常用的配置段是針對檔案系統和網路空間特定位置的配置段。首先必須理解檔案系統和網路空間這兩個概念的區別:檔案系統是指作業系統所看見的磁碟檢視,比如,在unix系統中,apache會被預設安裝到「/usr/local/apache2.2」

目錄下,在windows系統中,apache會被預設安裝到「program files/apache software foundation/apache2.2」

目錄下。相反,網路空間是**被web伺服器傳送及被客戶在瀏覽器中所看到的檢視。在windows平台下,網路空間的預設安裝路徑為「program files/apache software foundation/apache2.2/ htdocs」。由於網頁可以從資料庫或其他地方動態生成,因此,網路空間無須直接對映到檔案系統中。

apache

始終用正斜槓而不是反斜槓作為路徑的分隔符,即使是在

windows

平台中。

1)檔案系統容器

和指令與其相應的正規表示式

版本(和)一起作用於檔案系統的特定部分。配置段中的指令作用於指定的檔案系統目錄及其所有子目錄,.htaccess檔案可以達到同樣的效果。在下面的示例中,/var/web/dir1及其所有子目錄被允許進行目錄索引。

options +indexes

配置段中的指令作用於特定的檔名,而無論這個檔案實際存在於哪個目錄下。下面的示例中的配置指令如果出現在配置檔案的主伺服器段,則會拒絕對位於任何目錄下的private.html的訪問。

order allow,deny

deny from all

和段的組合可以作用於檔案系統中的特定檔案。下面的示例中的配置會拒絕對/var/web/dir1/private.html、/var/web/dir1/subdir2/private.html、/var/web/dir1/subdir3/ private.html等任何/var/web/dir1/目錄下的private.html的訪問。

order allow,deny

deny from all

2)網路空間容器

指令與其相應的正規表示式版本()一起作用於網路空間的特定部分。下面的示例中的配置會拒絕對任何以「/private」開頭的url路徑的訪問,如

、123

、com/private/dir/file.html等所有以「/private」開頭的url路徑。

order allow,deny

deny from all

指令與檔案系統無關,下面的示例演示了如何將特定的url對映到apache內部的處理器mod_status中,而並不要求檔案系統中確實存在server-status檔案。

sethandler server-status

3)萬用字元和正規表示式

、、指令可以使用與c標準庫中的fnmatch類似的shell風格的萬用字元。「*」匹配任何字串,「?」匹配任何單個的字元,「[seq]」匹配seq序列中的任何字元,「/」符號不被任何萬用字元所匹配,所以必須顯式地使用。

如果需要更複雜的匹配,這些容器都有乙個對應的正則版本:<

directorymatch>、、,可以使用與perl相容的正規表示式

,以提供更複雜的匹配。下面的示例使用非正規表示式的萬用字元來改變所有使用者目錄的配置。

options indexes

下例是使用正規表示式一次性拒絕對多種圖形檔案的訪問。

(?i:gif|jpe?g|png)$>

order allow,deny

deny from all

4)選擇檔案系統容器,還是網路空間容器

選擇使用檔案系統容器,還是使用網路空間容器其實很簡單。當指令作用於檔案系統時,總是用或;而當指令作用於不存在於檔案系統中的物件時,就用,比如乙個由資料庫生成的網頁。一定不要試圖用去限制對檔案系統中的物件的訪問,因為許多不同的網路空間路徑可能會對映到同乙個檔案系統目錄,從而導致訪問限制被突破。比如:

order allow,deny

deny from all

上述配置對com/dir/

請求的確起作用。但是,設想在乙個不區分大小寫的檔案系統中,這個訪問限制會被com/dir/

請求輕易突破。而指令才會真正作用於對這個位置的任何形式的請求。但是,有乙個例外,就是unix檔案系統中的符號連線(軟連線),符號連線可以使同乙個目錄出現在檔案系統中的多個位置。指令將不重設路徑名而直接追蹤符號連線,因此,對於安全要求最高的,應該用options指令禁止對符號連線的追蹤。

同時,也不要認為使用大小寫敏感的檔案系統就無所謂了,因為有很多方法可以將不同的網路空間路徑對映到同乙個檔案系統路徑中,所以,應當盡可能使用檔案系統容器。但是也有乙個例外,就是把訪問限制放在配置段中可以很安全地作用於除了某些特定url以外的所有url。

3.虛擬主機

「虛擬主機」是指在乙個機器上執行多個**(比如,www.company1.com

和www.company2.com

)。如果每個**擁有不同的ip位址,則虛擬主機可以是「基於ip」的;如果只有乙個ip位址,也可以是「基於主機名」的,其實現對終端使用者是透明的。這一點,其實在介紹iis**架設中也有類似的說明,那就是**的標識,它既可以基於ip位址,也可以基於「主機頭值」(也就是網域名稱),還可以基於埠。

apache是率先支援基於ip的虛擬主機的伺服器之一。1.1及其更新版本同時支援基於ip和基於主機名的虛擬主機。虛擬主機中所用的容器就是,它作用於特定的虛擬主機,為同乙個機器上具有不同配置的多個主機提供支援。

有關虛擬主機的配置方法將在本章後面具體介紹。

4.**

和容器中的指令僅作用於通過mod_proxy**伺服器訪問的、與指定url匹配的站點。下面的示例中的配置會拒絕通過**伺服器訪問cnn.com站點。

*>

order allow,deny

deny from all

5.總結

以上介紹了幾種型別的容器及所用的指令,查閱指令的作用域,就可以知道哪些指令可以出現在哪些配置段中。從語法上看,允許在段中使用的指令當然也可以在、、、、、、段中使用,但也有例外:

allowoverride指令只能出現在段中。

options(引數選項)中的followsymlinks和symlinksifownermatch只能出現在段或者.htaccess檔案中。options指令不能用於和段。

除了各自的應用範圍不同之外,它們之間有些配置段還是可以合併

的。配置段會按非常特別的順序依次生效,由於這會對配置指令的處理結果產生重大影響,因此理解它的流程非常重要。

合併的順序如下。

(1)(除了正規表示式)和.htaccess同時處理(如果允許的話,.htaccess的設定會覆蓋的設定);

(2)(和);

(3)和同時處理;

(4)和同時處理。

除了,每個組都按它們在配置檔案中出現的順序被依次處理,而(上面的第1組),會按順序由短到長被依次處理。例如:會先於被處理。如果有多個指向同乙個目錄的段,則按它們在配置檔案中的順序被依次處理。用include指令包含進來的配置被視為按原樣插入到include指令的位置。

位於容器中的配置段在外部對應的段處理完畢以後再處理,這樣就允許虛擬主機覆蓋主伺服器的設定。

當請求是由

mod_proxy

處理的時候,

容器將會在處理順序中取代

容器的位置。也就是說,後面的段覆蓋前面的相應的段。

Apache 2 2配置段和容器

配置段 和 容器 都是用來指定配置檔案的作用範圍的。配置檔案中指令的作用範圍可能是整個伺服器,也可能是特定的目錄 檔案 主機 url。本節將要介紹的是如何使用配置段及.htaccess檔案來改變配置指令的作用範圍。1 配置段和容器的型別 配置段的型別 包括在core mod version和mod ...

Apache2 2快取配置

參見原文 url mod expires可以減少10 左右的重複請求,讓重複的使用者對指定的頁面請求結果都cache在本地,根本不向伺服器發出請求。loadmodule expires module modules mod expires.so expiresactive on expiresbyt...

apache2 2 虛擬主機配置

plain view plain copy loadmodule vhost alias module modules mod vhost alias.so 去掉 意思是啟用apache的虛擬主機功能。去掉這一行的 意思是從conf extra httpd vhosts.conf這個檔案匯入虛擬主機...