apache的 語句以及屬性的含義


在整完apache和tomcat的之后我覺得有必要把<directory>和它下面的屬性捋順一下

如何訪問根目錄下的目錄http://192.168.1.12/test/

第一.缺省apache不允許訪問http目錄(沒有定義,就沒有訪 
問權限)

 訪問目錄http://192.168.1.12/test/ 會顯示: Forbidden You don't have permission to access /test/ on this server.

第二.無限制目錄訪問 
在httpd.conf中增加定義,即可打開無限制的目錄訪問權限

 <Directory /home/macg/www/test> Options All AllowOverride all </Directory>

再訪問會顯示如下:

 Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80 Index of /test Name Last modified Size Description ------------------------------------------------------------ Parent Directory - bg0073.jpg 29-Nov-2006 21:02 36K bg0135.jpg 29-Nov-2006 21:03 41K bg0137.jpg 29-Nov-2006 21:03 47K slade1.html 29-Nov-2006 22:02 1.2K slade2.html 29-Nov-2006 22:02 1.1K slade3.html 29-Nov-2006 22:02 1.4K slade4.html 29-Nov-2006 22:02 1.8K slade5.html 29-Nov-2006 22:02 2.3K ------------------------------------------------------------- Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80

實際AllowOverride all是enable .htaccess目錄限制功能。

但test目錄下並沒有.htaccess文件

等於開放訪問,無限制。

第三.有限制目錄訪問

將其他目錄中的.htaccess拷貝入要限制訪問的目錄

[root@localhost test]# ls -a . .. bg0073.jpg bg0135.jpg bg0137.jpg slade1.html slade2.html slade3.html slade4.html slade5.html [root@localhost test]# cp ../test1/.htaccess . [root@localhost test]# ls -a . .. bg0073.jpg bg0135.jpg bg0137.jpg .htaccess slade1.html slade2.html slade3.html slade4.html slade5.html [root@localhost test]# more .htaccess authType Basic AuthName "Restricted Files" AuthUserFile /etc/httpd/passwords Require valid-user

再訪問http://192.168.1.12/test/ 
會跳出身份認證窗口,輸入用戶名密碼,即可訪問目錄

.htaccess 目錄限制的配置 
要使用.htaccess文件,先在將httpd.conf中建立<Directory > 
</Directory>

 <Directory "/home/macg/www/test"> Options All 允許對目錄的操作,ALL---所有操作 AllowOverride all AllowOverride all----允許.htaccess所有指令,缺省是all AllowOverride None ----完全忽略.htaccess文件 </Directory>

用/usr/bin/htpasswd創建一個用於認證的密碼文件。 
並且這個文件不應該置於DocumentRoot目錄下,以避免被下載。 
建議創建在/etc/httpd/目錄下:

 [root@localhost httpd]# /usr/bin/htpasswd -c /etc/httpd/passwords macg -c建立文件 New password: Re-type new password: Adding password for user macg [root@localhost httpd]# /usr/bin/htpasswd /etc/httpd/passwords gary 沒有-c就是單純的adduser 追加用戶 New password: Re-type new password: Adding password for user gary [root@localhost httpd]# more /etc/httpd/passwords macg:U8jCwSsZyAB2g gary:06yCDyg7AijlM

在受限制目錄下建立.htaccess文件

[root@localhost test]# ls -a . .. bg0073.jpg bg0135.jpg bg0137.jpg .htaccess slade1.html slade2.html slade3.html slade4.html slade5.html [root@localhost test]# more .htaccess authType Basic authType--------認證類型 由mod_auth_basic提供的Basic Basic認證方法並不加密來自用戶瀏覽器的密碼(明文傳輸) 更安全的認證方法"AuthType Digest",即由mod_auth_digest供的摘要認證 最新的瀏覽器版本才支持MD5認證 (認證,服務器響應速度會受一些影響,一般有幾百個用戶就會對響應速度有非常明顯的影響) AuthName "Restricted Files" AuthName "會員區" 此句是顯示給用戶看的 AuthUserFile /etc/httpd/passwords 此目錄接受passwords內定義用戶的認證請求 or Require macg 此目錄只接受單一用戶macg(unix用戶)認證請求

<Directory ></Directory>中指令的含義

<Directory "/home/macg/www/test"> Options All AllowOverride all </Directory> Options指令-------目錄的訪問特性 option none 禁止對目錄的所有操作 option all 允許對目錄的所有操作,ALL---所有操作 option ExecCGI 對該目錄,可以執行cgi腳本 option Indexes 允許訪問該目錄(而該目錄沒有index.html)時,返回目錄下的文件列表 option FollowSymLinks 只允許對目錄的FollowSymLinks操作 AllowOverride指令 None 不讀取.htaccess all all----允許.htaccess所有指令,缺省是all Limit .htaccess函蓋具體限定的主機(allow,deny) AuthConfig .htaccess函蓋跟認證有關指令(AuthType,AuthName) 

<Directory ></Directory> 對下面的所有子目錄也生效

所以httpd.conf中先對根目錄/進行配置,等於是設置缺省配置

httpd.conf中先對根目錄/進行配置,等於是設置缺省配置 <Directory /> Options FollowSymLinks 禁止對目錄的訪問(option只允許對目錄的FollowSymLinks操作) AllowOverride None 不讀取.htaccess Order deny,allow deny all Deny from all </Directory> <Directory "/usr/local/apache2/htdocs"> Options Indexes FollowSymLinks 只允許訪問index和連接 AllowOverride None Order allow,deny 承接父目錄(/)的deny all,這里也是deny all Allow from all </Directory>

order allow deny ————-httpd.conf中封IP之類的操作

 Apache模塊 mod_authz_host <Directory /docroot> Order Deny,Allow Deny from ... Allow from ... </Directory> 注意順序: 除了后面allow的,其他都deny 典型的封IP Order Allow,Deny Allow from all Deny from 205.252.46.165 注意順序: 除了后面deny的,其他都allow Deny from 192.168.2 典型的封網段

上面清楚了 可以設置一個例子

Apache對於多虛擬主機以及多虛擬路徑的配置

ServerName localhost <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/home/work/" ## 保證所有的項目都放在/home/work/目錄, 該目錄只做配置 <Directory "/home/work/"> Options None AllowOverride None Require all denied </Directory>

httpd-vhosts.conf 首先第一件事就是指定默認的DocumentRoot

# 沒有商量, 必須放在httpd.conf中申明的根路徑 # 不需要severName配置 <VirtualHost 127.0.0.1:8800> DocumentRoot "/home/work/www/htdocs" <Directory /home/work/www/htdocs> AllowOverride none Require all granted </Directory> </VirtualHost> ##如果不需要多主機支持,到此為止

添加虛擬主機,虛擬目錄等等

## 說明: local.baidu.com 為第一個主機名, 如果多個域名映射設置ServerAlias即可 ## Alias 注意“/”的位置 <VirtualHost local.baidu.com:8800> DocumentRoot "/home/work/workspace" ServerName local.baidu.com # ServerAlias local.baidu.com.cn local.baidu.cn <Directory /home/work/workspace> Options FollowSymLinks AllowOverride none Require all granted </Directory> Alias /phpMyAdmin "/home/work/www/htdocs/phpMyAdmin/" # 添加一個日志分析, rotatelogs需要自己安裝 LogFormat "{method:\"%m\",state:\"%s\",protocol:\"%H\",url:\"%U\",time:\"%{%Y-%m-%d %T}t\",ua:\"%{User-Agent}i\",query:\"%q\",refer:\"%{Referer}i\",server:\"%V\"}" seo CustomLog "|/usr/sbin/rotatelogs logs/seo_%Y%m%d.log 86400 480" seo </VirtualHost> ## 同上其他主機配置

當然對於該目錄下個各種配置屬性 不過下面這個是2.2的屬性 在2.4中進行了少許的變更 所以2.4還是要查詢文檔 不過有下面的解釋打底應該很容易

Allow和Deny可以用於apache的conf文件或者.htaccess文件中(配合 
Directory, Location, Files等),用來控制目錄和文件的訪問授權。 
所以,最常用的是: 
Order Deny,Allow 
Allow from All

注意“Deny,Allow”中間只有一個逗號,也只能有一個逗號,有空格都會出 
錯;單詞的大小寫不限。上面設定的含義是先設定“先檢查禁止設定,沒有 
禁止的全部允許”,而第二句沒有Deny,也就是沒有禁止訪問的設定,直 
接就是允許所有訪問了。這個主要是用來確保或者覆蓋上級目錄的設置,開 
放所有內容的訪問權。

按照上面的解釋,下面的設定是無條件禁止訪問:

Order Allow,Deny Deny from All

如果要禁止部分內容的訪問,其他的全部開放:

Order Deny,Allow Deny from ip1 ip2 或者 Order Allow,Deny Allow from all Deny from ip1 ip2

apache會按照order決定最后使用哪一條規則,比如上面的第二種方式,雖 
然第二句allow允許了訪問,但由於在order中allow不是最后規則,因此還 
需要看有沒有deny規則,於是到了第三句,符合ip1和ip2的訪問就被禁止 
了。注意,order決定的“最后”規則非常重要,下面是兩個錯誤的例子和 
改正方式:

Order Deny,Allow Allow from all Deny from domain.org

錯誤:想禁止來自domain.org的訪問,但是deny不是最后規則,apache在 
處理到第二句allow的時候就已經匹配成功,根本就不會去看第三句。 
解決方法:Order Allow,Deny,后面兩句不動,即可。

Order Allow,Deny Allow from ip1 Deny from all

錯誤:想只允許來自ip1的訪問,但是,雖然第二句中設定了allow規則,由 
於order中deny在后,所以會以第三句deny為准,而第三句的范圍中又明顯 
包含了ip1(all include ip1),所以所有的訪問都被禁止了。 
解決方法一:直接去掉第三句。 
解決方法二:

Order Deny,Allow Deny from all Allow from ip1

下面是測試過的例子:

-------------------------------- Order deny,allow allow from all deny from 219.204.253.8 全部都可以通行 ------------------------------- Order deny,allow deny from 219.204.253.8 allow from all 全部都可以通行 ------------------------------- Order allow,deny deny from 219.204.253.8 allow from all 只有219.204.253.8不能通行 ------------------------------- Order allow,deny allow from all deny from 219.204.253.8 只有219.204.253.8不能通行 ------------------------------- ------------------------------- Order allow,deny deny from all allow from 219.204.253.8 全部都不能通行 ------------------------------- Order allow,deny allow from 219.204.253.8 deny from all 全部都不能通行 ------------------------------- Order deny,allow allow from 219.204.253.8 deny from all 只允許219.204.253.8通行 ------------------------------- Order deny,allow deny from all allow from 219.204.253.8 只允許219.204.253.8通行 ------------------------------- -------------------------------- Order deny,allow 全部都可以通行(默認的) ------------------------------- Order allow,deny 全部都不能通行(默認的) ------------------------------- Order allow,deny deny from all 全部都不能通行 ------------------------------- Order deny,allow deny from all 全部都不能通行 ------------------------------- 對於上面兩種情況,如果換成allow from all,則全部都可以通行! ------------------------------- Order deny,allow deny from 219.204.253.8 只有219.204.253.8不能通行 ------------------------------- Order allow,deny deny from 219.204.253.8 全部都不能通行 ------------------------------- Order allow,deny allow from 219.204.253.8 只允許219.204.253.8通行 ------------------------------- Order deny,allow allow from 219.204.253.8 全部都可以通行 ------------------------------- ------------------------------- order deny,allow allow from 218.20.253.2 deny from 218.20 代表拒絕218.20開頭的IP,但允許218.20.253.2通過;而其它非218.20開頭的IP也都允許通過。 ------------------------------- order allow,deny allow from 218.20.253.2 deny from 218.20

 

和上面的差不多,只是掉換的order語句中的allow、deny先后順序,但最 
終結果表示全部都拒絕!

form:http://hi.baidu.com/enjoypain/blog/item/f48c7aecdba298d12f2e21ac.html 
前段時間做了個Apache的HTTP代理服務器,其中的order allow,deny這 
部分弄的不太懂,於是上網找資料看,誰知道越看越糊塗,其中有些難以分 
辨對錯甚至是誤導。就像破解windows系統密碼的一些文章那樣,很多都是 
人雲亦雲的,並沒有經過測試。廢話少說,先把我經過測試后分析總結出來 
的結論show出來,相信這對大家的理解非常有幫助。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM