Apache HTTP Server 2.4 版
說明 | 根據主機(名稱或 IP 位址)進行群組授權 |
---|---|
狀態 | 延伸模組 |
模組識別碼 | access_compat_module |
原始檔案 | mod_access_compat.c |
相容性 | 作為 Apache HTTP Server 2.3 的相容性模組提供,與先前的 Apache httpd 2.x 版本相容。此模組提供的指令已棄用,改由新的授權重組機制取代。詳見 mod_authz_host |
mod_access_compat
提供的指令用於 <Directory>
、<Files>
和 <Location>
區段,以及 .htaccess
檔案,以控制對伺服器特定部分的存取。存取可以根據客戶端主機名稱、IP 位址或客戶端要求的其他特質來控管,並擷取至 環境變數 中。 Allow
和 Deny
指令用於指定哪些客戶端允許或不允許存取伺服器,而 Order
指令會設定預設的存取狀態,並設定 Allow
和 Deny
指令如何彼此互動。
基於主機的存取限制和基於密碼的驗證可以同時實作。在這種情況下,將使用 Satisfy
指令來判斷兩組限制如何互動。
mod_access_compat
提供的指令已由 mod_authz_host
棄用。將舊指令(例如 Order
、Allow
或 Deny
)與新指令(例如 Require
)混合使用在技術上是可行的,但並不建議這麼做。此模組用於支援僅包含舊指令的設定檔,以利升級至 2.4 版。如需詳細資訊,請查閱 升級手冊。
一般情況下,存取限制指令適用於所有存取方法 (GET
、PUT
、POST
等)。在大部分情況下,這是理想的行為。但是,可以透過將指令放在 <Limit>
區段中來限制一些方法,同時讓其他方法沒有限制。
當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。
說明 | 控制哪些主機可以存取伺服器的區域 |
---|---|
語法 | Allow from all|主機|env=[!]env-variable [主機|env=[!]env-variable] ... |
內容 | 目錄、.htaccess |
覆寫 | 限制 |
狀態 | 延伸模組 |
模組 | mod_access_compat |
Allow
指令影響哪些主機可以存取伺服器的區域。存取可由主機名稱、IP 位址、IP 位址範圍或客戶端要求中擷取的環境變數中的其他特徵控管。
此指令的第一個引數總是 from
。後續引數可以有三種類型。如果指定 Allow from all
,則允許所有主機存取,而 Deny
和 Order
指令的組態則如以下所述。若要僅允許特定主機或主機群組存取伺服器,可以使用下列任何格式指定 主機
Allow from example.org Allow from .net example.edu
名稱與此字串匹配或結束於此字串的主機可以存取。只有完整的組件會匹配,因此上例會匹配 foo.example.org
,但不會匹配 fooexample.org
。無論 HostnameLookups
指令的設定如何,此組態都會讓 Apache httpd 對客戶端 IP 位址執行雙重 DNS 查詢。它會對 IP 位址執行反向 DNS 查詢以尋找關聯的主機名稱,然後對主機名稱執行正向查詢以確保它與原始 IP 位址匹配。只有當正向和反向 DNS 一致且主機名稱匹配時,才會允許存取。
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 個位元組。
Allow from 10.1.0.0/255.255.0.0
一個網路 a.b.c.d,以及一個遮罩 w.x.y.z。用於更細緻的子網路限制。
Allow from 10.1.0.0/16
與前一個案例相似,但遮罩由 nnn 個高階 1 位元組成。
請注意,上述最後三個範例完全符合同一組主機。
IPv6 位址和 IPv6 子網路可如示範中指定的。
Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10
Allow
指令的第三個引數格式允許根據 環境變數 的存在與否來控制對伺服器的存取。當指定 Allow from env=env-variable
時,如果環境變數 env-variable 存在,則允許請求存取。當指定 Allow from env=!env-variable
時,如果環境變數 env-variable 不存在,則允許請求存取。伺服器提供使用 mod_setenvif
提供的指令根據用戶端請求的特徵靈活地設定環境變數的功能。因此,這個指令可根據客戶端 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>
在本案例中,開頭為 KnockKnock/2.0
的使用者代理字串的瀏覽器將獲得存取權限,其他則全部拒絕。
當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。
說明 | 控制哪個主機被拒絕存取伺服器 |
---|---|
語法 | Deny from all|主機|env=[!]env-variable [主機|env=[!]env-variable] ... |
內容 | 目錄、.htaccess |
覆寫 | 限制 |
狀態 | 延伸模組 |
模組 | mod_access_compat |
這個指令允許根據主機名稱、IP 位址或環境變數限制對伺服器的存取。 Deny
指令的引數與 Allow
指令的引數相同。
說明 | 控制預設存取狀態,以及判斷 Allow 與 Deny 的順序。 |
---|---|
語法 | Order 排序 |
預設 | Order Deny,Allow |
內容 | 目錄、.htaccess |
覆寫 | 限制 |
狀態 | 延伸模組 |
模組 | mod_access_compat |
Order
指令,以及 Allow
和 Deny
指令,控制三道式存取控制系統。第一道處理 Allow
或 Deny
指令,由 Order
指令指定。第二道解析其餘的指令(Deny
或 Allow
)。第三道適用於與前兩道都不相符的所有請求。
請注意,所有 允許
和 拒絕
指令都已經處理完畢,這和一般的防火牆只使用第一個匹配的項目不同。最後一個匹配的項目會生效(這點也和一般的防火牆不同)。此外,設定檔中各行程列的順序並不重要—所有 允許
行列會被當成一組處理,所有 拒絕
行列會被當成另一組,而預設狀態則會單獨進行運作。
排序為以下之一:
允許,拒絕
允許
指令都會進行評估;其中至少一個必須匹配,否則該要求將會被拒絕。接下來,所有 拒絕
指令都會進行評估。如果任一個匹配,則該要求將會被拒絕。最後,任何與 允許
或 拒絕
指令不匹配的要求都會被預設拒絕。拒絕,允許
拒絕
指令都會進行評估;如果任一個匹配,則該要求將會被拒絕,除非它同時也匹配 允許
指令。任何與 允許
或 拒絕
指令不匹配的要求都會被允許。相互拒絕
Order Allow,Deny
相同,並且已被棄用。關鍵字只能用逗點隔開;它們之間不能有空白。
匹配 | 允許,拒絕 結果 | 拒絕,允許 結果 |
---|---|---|
只匹配允許 | 要求允許 | 要求允許 |
只匹配拒絕 | 要求拒絕 | 要求拒絕 |
沒有匹配到 | 預設為第二個指令:拒絕 | 預設為第二個指令:允許 |
同時匹配允許及拒絕 | 最後匹配控制:拒絕 | 最後匹配控制:允許 |
在以下範例中,example.org 網域中的所有主機都允許存取;所有其他主機都禁止存取。
Order Deny,Allow Deny from all Allow from example.org
在以下一個範例中,example.org 網域中的所有主機都允許存取,但 foo.example.org 子網域中的主機除外,這些主機會被禁止存取。example.org 網域以外的所有主機都會被拒絕存取,因為預設狀態是 拒絕
存取伺服器。
Order Allow,Deny Allow from example.org Deny from foo.example.org
另一方面,如果上一個範例中的 順序
改成 拒絕,允許
,則所有主機都會被允許存取。之所以會這樣,是因為不管設定檔中指令的實際順序為何,允許來自 example.org
都會在最後進行評估,並且會覆寫掉 拒絕來自 foo.example.org
。example.org 網域以外的所有主機也會被允許存取,因為預設狀態是 允許
住。
存在 Order
指令時,儘管沒有附帶的 Allow
和 Deny
指令,也能影響對伺服器某個部分的存取,因為會影響預設的存取狀態。例如,
<Directory "/www"> Order Allow,Deny </Directory>
將拒絕對 /www
目錄的所有存取權限,因為預設存取狀態設定為 Deny
。
Order
指令只控制每個伺服器組態處理階段中存取指令處理的順序。這表示例如在 <Location>
區段中出現的 Allow
或 Deny
指令將永遠在 <Directory>
區段或 .htaccess
檔案中出現的 Allow
或 Deny
指令後才進行評估,而不論 Order
指令的設定為何。有關合併組態區段的詳細資料,請參閱 目錄、位置和檔案區段如何運作 的文件。
當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。
說明 | 主機等級存取控制和使用者身分驗證之間的互動 |
---|---|
語法 | Satisfy Any|All |
預設 | Satisfy All |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 延伸模組 |
模組 | mod_access_compat |
相容性 | 受 2.0.51 及後續版本的 <Limit> 和 <LimitExcept> 影響 |
如果同時使用 Allow
和 Require
,存取政策。此參數可以是 All
或 Any
。此指令僅在透過使用者名稱/密碼和客戶端主機位址限制對特定區域的存取權限時才實用。在此情況下,預設行為 (All
) 是要求客戶端通過位址存取限制並輸入有效的使用者名稱和密碼。透過選項 Any
,如果客戶端通過主機限制或輸入有效的使用者名稱和密碼,系統就會授與存取權限。此設定可讓您限制對區域的密碼存取權,但允許來自特定位址的客戶端在不提示密碼的情況下進入。
例如,如果您希望讓在您的網路中的人員不受限制地存取您網站的一部分,但卻要求網路外的使用者提供密碼,您可以使用類似以下的組態
Require valid-user Allow from 192.168.1 Satisfy Any
Satisfy
指令的另一常見用途是,放寬子目錄的存取權限限制
<Directory "/var/www/private"> Require valid-user </Directory> <Directory "/var/www/private/public"> Allow from all Satisfy Any </Directory>
在上述範例中,將強制要求對 /var/www/private
目錄進行身分驗證,但對 /var/www/private/public
目錄則不需要。
從 2.0.51 版開始,可以透過 <Limit>
和 <LimitExcept>
區段,將 Satisfy
指令限制在特定方法。
當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。