Apache配置參數(shù)deny和allow的使用實(shí)例
由于產(chǎn)品的需要,最近在配置apache的負(fù)載均衡功能,但是在配置虛擬主機(jī)的訪問(wèn)權(quán)限的時(shí)候我們遇到了一些問(wèn)題。主要問(wèn)題是deny和allow的執(zhí)行順序,抽時(shí)間研究了下這兩個(gè)參數(shù)的使用,現(xiàn)把deny和allow的使用情況總結(jié)如下。
一、使用情況總結(jié)
我們來(lái)看下下面的apache的一個(gè)配置,具體代碼如下:
<Directory />
Order allow,deny #1
Allow from all #2
deny from 192.9.200.69 #3
</Directory>
以前使用這兩個(gè)參數(shù)的時(shí)候比較混亂,具體不太清楚到底是哪個(gè)參數(shù)在起作用。通過(guò)實(shí)驗(yàn),我們可以總結(jié)下規(guī)律,具體規(guī)律如下:
1. 規(guī)律
當(dāng)我們看到一個(gè)apache的配置時(shí),可以從下面的角度來(lái)理解。一默認(rèn),二順序,三重疊。
2. 上面配置說(shuō)明
[1] 一默認(rèn)
Order allow,deny ,這句話的作用是配置allow和deny的順序,默認(rèn)只有最后一個(gè)關(guān)鍵字起作用,這里起作用的關(guān)鍵字就是“deny”,默認(rèn)拒絕所有請(qǐng)求。為了便于理解,我們可以畫一個(gè)圓,圓的背景色涂上黑色,我們給這個(gè)圓起個(gè)編號(hào),叫圓1。
[2] 二順序
由于上邊的Order指出判斷的順序是先判斷allow的規(guī)則,然后才是deny的規(guī)則。所以我們要先判斷allow的請(qǐng)求,由于該請(qǐng)求中配置的是allow from all,
所以表示該請(qǐng)求允許所有請(qǐng)求。這時(shí)我們?cè)佼嬕粋€(gè)圓,背景色涂上白色,我們給圓起個(gè)編號(hào),叫圓2。
我們?cè)賮?lái)看deny的判斷規(guī)則,由于 deny from 192.9.200.69 ,表示拒絕來(lái)自ip地址為“192.9.200.69”,所以我們可以畫出一塊紅色區(qū)域,表示“192.9.200.69”,我們把這塊區(qū)域叫區(qū)域3。
注意:即使把“Allow from all”寫在“deny from 192.9.200.69”下面,依然是需要先判斷allow規(guī)則,也就是說(shuō)只有Order才能決定allow和order的優(yōu)先順序。
[3] 三重疊
我們把上邊產(chǎn)生的圓1、圓2和區(qū)域3依次從下往上堆疊在一起。每個(gè)層都是不透明的,這時(shí)我們可以看到最終效果是除了“192.9.200.69”這塊紅色區(qū)域外,其他的所有都是白色區(qū)域。也就是只有“192.9.200.69”這個(gè)ip地址沒(méi)有權(quán)限訪問(wèn)該目錄,其他的請(qǐng)求都有權(quán)限訪問(wèn)該目錄。
二、看看下面的例子
也許上邊沒(méi)有說(shuō)明白,我們?cè)賮?lái)看下面的例子,每個(gè)配置后面都有簡(jiǎn)單的說(shuō)明,配置文件中的“#”號(hào)后邊的數(shù)字表示配置項(xiàng)起作用的先后順序。
1. 只允許192.9.200.69請(qǐng)求訪問(wèn)目錄
<Directory />
Order deny,allow #1.默認(rèn)允許全部請(qǐng)求
deny from all #2.按照順序,先判斷deny規(guī)則,拒絕所有請(qǐng)求
Allow from 192.9.200.69 #3.重疊,允許IP192.9.200.69的請(qǐng)求
</Directory>
2. 允許所有請(qǐng)求訪問(wèn)目錄
<Directory />
Order deny,allow #1.默認(rèn)允許全部請(qǐng)求
deny from 192.9.200.69 #2.按照順序,先判斷deny規(guī)則,拒絕192.9.200.69的請(qǐng)求
Allow from all #3.重疊,允許所有請(qǐng)求
</Directory>
3. 拒絕所有請(qǐng)求訪問(wèn)目錄
<Directory />
Order allow,deny #1.默認(rèn)拒絕全部請(qǐng)求
Allow from 192.9.200.69 #2.順序,允許 192.9.200.69請(qǐng)求
deny from all#3.重疊,拒絕所有請(qǐng)求
</Directory>
4. 除了192.9.200.69的請(qǐng)求外,其他請(qǐng)求都可以訪問(wèn)目錄
<Directory />
Order allow,deny #1.默認(rèn)拒絕全部請(qǐng)求
Allow from all #2.順序,允許所有請(qǐng)求
deny from 192.9.200.69#3.重疊,拒絕192.9.200.69請(qǐng)求
</Directory>
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用來(lái)控制目錄和文件的訪問(wèn)授權(quán)。
所以,最常用的是:
Order Deny,Allow
Allow from All
注意“Deny,Allow”中間只有一個(gè)逗號(hào),也只能有一個(gè)逗號(hào),有空格都會(huì)出錯(cuò);單詞的大小寫不限。上面設(shè)定的含義是先設(shè)定“先檢查禁止設(shè)定,沒(méi)有禁止的全部允許”,而第二句沒(méi)有Deny,也就是沒(méi)有禁止訪問(wèn)的設(shè)定,直接就是允許所有訪問(wèn)了。這個(gè)主要是用來(lái)確?;蛘吒采w上級(jí)目錄的設(shè)置,開(kāi)放所有內(nèi)容的訪問(wèn)權(quán)。
按照上面的解釋,下面的設(shè)定是無(wú)條件禁止訪問(wèn):
Order Allow,Deny
Deny from All
如果要禁止部分內(nèi)容的訪問(wèn),其他的全部開(kāi)放:
Order Deny,Allow
Deny from ip1 ip2
或者
Order Allow,Deny
Allow from all
Deny from ip1 ip2
apache會(huì)按照order決定最后使用哪一條規(guī)則,比如上面的第二種方式,雖然第二句allow允許了訪問(wèn),但由于在order中allow不是最后規(guī)則,因此還需要看有沒(méi)有deny規(guī)則,于是到了第三句,符合ip1和ip2的訪問(wèn)就被禁止了。注意,order決定的“最后”規(guī)則非常重要,下面是兩個(gè)錯(cuò)誤的例子和改正方式:
Order Deny,Allow
Allow from all
Deny from domain.org
錯(cuò)誤:想禁止來(lái)自domain.org的訪問(wèn),但是deny不是最后規(guī)則,apache在處理到第二句allow的時(shí)候就已經(jīng)匹配成功,根本就不會(huì)去看第三句。
解決方法:Order Allow,Deny,后面兩句不動(dòng),即可。
Order Allow,Deny
Allow from ip1
Deny from all
錯(cuò)誤:想只允許來(lái)自ip1的訪問(wèn),但是,雖然第二句中設(shè)定了allow規(guī)則,由于order中deny在后,所以會(huì)以第三句deny為準(zhǔn),而第三句的范圍中又明顯包含了ip1(all include ip1),所以所有的訪問(wèn)都被禁止了。
解決方法一:直接去掉第三句。
解決方法二:
Order Deny,Allow
Deny from all
Allow from ip1
相關(guān)文章
Linux雙網(wǎng)卡綁定實(shí)現(xiàn)負(fù)載均衡詳解
這篇文章主要為大家詳細(xì)介紹了Linux雙網(wǎng)卡綁定實(shí)現(xiàn)負(fù)載均衡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10關(guān)于VPS內(nèi)存不足的一些說(shuō)明和解決辦法
關(guān)于VPS內(nèi)存不足的一些說(shuō)明和解決辦法,需要的朋友可以參考下。2011-11-11Apache httpd 安裝module mod_expires、mod_deflate的方法
Apache httpd 安裝module mod_expires、mod_deflate的方法,需要的朋友可以參考下。2011-11-11搭建一個(gè)大型網(wǎng)站架構(gòu)的實(shí)驗(yàn)環(huán)境(Squid緩存服務(wù)器篇)
Squid是一個(gè)高性能的代理緩沖服務(wù)器,也許你已經(jīng)用過(guò)Windows平臺(tái)下的WinGate,MS Proxy Server等功能類似的產(chǎn)品。2009-07-07Linux中g(shù)it用https連接時(shí)不用每次輸入密碼的方法
這篇文章主要給大家介紹了關(guān)于Linux中g(shù)it使用https連接時(shí)不用每次輸入密碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06