因爲產品的須要,最近在配置apache的負載均衡功能,可是在配置虛擬主機的訪問權限的時候咱們遇到了一些問題。主要問題是deny和allow的執行順序,抽時間研究了下這兩個參數的使用,現把deny和allow的使用狀況總結以下。 apache
1、 使用狀況總結 負載均衡
咱們來看下下面的apache的一個配置,具體代碼以下: spa
<Directory "D:/TRS/Apache2.2.17/cgi-bin"> ip Order allow,deny #1 ci Allow from all #2 產品 deny from 192.9.200.69 #3 table </Directory> 配置 |
之前使用這兩個參數的時候比較混亂,具體不太清楚究竟是哪一個參數在起做用。經過實驗,咱們能夠總結下規律,具體規律以下: cgi
1. 規律 權限
當咱們看到一個apache的配置時,能夠從下面的角度來理解。一默認,二順序,三重疊。
2. 上面配置說明
[1] 一默認
Order allow,deny ,這句話的做用是配置allow和deny的順序,默認只有最後一個關鍵字起做用,這裏起做用的關鍵字就是「deny」,默認拒絕全部請求。爲了便於理解,咱們能夠畫一個圓,圓的背景色塗上黑色,咱們給這個圓起個編號,叫圓1。
[2] 二順序
因爲上邊的Order指出判斷的順序是先判斷allow的規則,而後纔是deny的規則。因此咱們要先判斷allow的請求,因爲該請求中配置的是allow from all,
因此表示該請求容許全部請求。這時咱們再畫一個圓,背景色塗上白色,咱們給圓起個編號,叫圓2。
咱們再來看deny的判斷規則,因爲 deny from 192.9.200.69 ,表示拒絕來自ip地址爲「192.9.200.69」,因此咱們能夠畫出一塊紅色區域,表示「192.9.200.69」,咱們把這塊區域叫區域3。
注意:即便把「Allow from all」寫在「deny from 192.9.200.69」下面,依然是須要先判斷allow規則,也就是說只有Order才能決定allow和order的優先順序。
[3] 三重疊
咱們把上邊產生的圓一、圓2和區域3依次從下往上堆疊在一塊兒。每一個層都是不透明的,這時咱們能夠看到最終效果是除了「192.9.200.69」這塊紅色區域外,其餘的全部都是白色區域。也就是隻有「192.9.200.69」這個ip地址沒有權限訪問該目錄,其餘的請求都有權限訪問該目錄。
2、 看看下面的例子
也許上邊沒有說明白,咱們再來看下面的例子,每一個配置後面都有簡單的說明,配置文件中的「#」號後邊的數字表示配置項起做用的前後順序。
1. 只容許192.9.200.69請求訪問目錄
<Directory "D:/TRS/Apache2.2.17/cgi-bin"> Order deny,allow #1.默認容許所有請求 Allow from 192.9.200.69 #3.重疊,容許IP192.9.200.69的請求 deny from all #2.按照順序,先判斷deny規則,拒絕全部請求 </Directory> |
2. 容許全部請求訪問目錄
<Directory "D:/TRS/Apache2.2.17/cgi-bin"> Order deny,allow #1.默認容許所有請求 Allow from all #3.重疊,容許全部請求 deny from 192.9.200.69 #2.按照順序,先判斷deny規則,拒絕192.9.200.69的請求 </Directory> |
3. 拒絕全部請求訪問目錄
<Directory "D:/TRS/Apache2.2.17/cgi-bin"> Order allow,deny #1.默認拒絕所有請求 Allow from 192.9.200.69 #2.順序,容許 192.9.200.69請求 deny from all#3.重疊,拒絕全部請求 </Directory> |
4. 除了192.9.200.69的請求外,其餘請求均可以訪問目錄
<Directory "D:/TRS/Apache2.2.17/cgi-bin"> Order allow,deny #1.默認拒絕所有請求 deny from 192.9.200.69#3.重疊,拒絕192.9.200.69請求 Allow from all #2.順序,容許全部請求 </Directory> |