zoukankan      html  css  js  c++  java
  • apache的<directory>语句以及属性的含义

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

    如何访问根目录下的目录http://192.168.1.12/test/

    第一.缺省apache不允许访问http目录(没有定义,就没有访 
    问权限)

    1 访问目录http://192.168.1.12/test/
    2 会显示:
    3 Forbidden
    4 You don't have permission to access /test/ on this server.

    第二.无限制目录访问 
    在httpd.conf中增加定义,即可打开无限制的目录访问权限

    1 <Directory /home/macg/www/test>
    2     Options All
    3     AllowOverride all
    4 </Directory>

    再访问会显示如下:

     1 Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80
     2 
     3 Index of /test
     4  Name                    Last modified      Size  Description
     5  ------------------------------------------------------------
     6  Parent Directory                             -   
     7  bg0073.jpg              29-Nov-2006 21:02   36K  
     8  bg0135.jpg              29-Nov-2006 21:03   41K  
     9  bg0137.jpg              29-Nov-2006 21:03   47K  
    10  slade1.html             29-Nov-2006 22:02  1.2K  
    11  slade2.html             29-Nov-2006 22:02  1.1K  
    12  slade3.html             29-Nov-2006 22:02  1.4K  
    13  slade4.html             29-Nov-2006 22:02  1.8K  
    14  slade5.html             29-Nov-2006 22:02  2.3K  
    15 -------------------------------------------------------------
    16 Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80
    17 --------------------- 

    实际AllowOverride all是enable .htaccess目录限制功能。

    但test目录下并没有.htaccess文件

    等于开放访问,无限制。

    第三.有限制目录访问

    将其他目录中的.htaccess拷贝入要限制访问的目录

     1 [root@localhost test]# ls -a
     2 .  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  slade1.html  
     3 slade2.html  slade3.html  slade4.html  slade5.html
     4 
     5 [root@localhost test]# cp ../test1/.htaccess .
     6 
     7 [root@localhost test]# ls -a
     8 .  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  .htaccess  
     9 slade1.html  slade2.html  slade3.html  slade4.html  
    10 slade5.html
    11 
    12 [root@localhost test]# more .htaccess
    13 authType Basic
    14 AuthName "Restricted Files"
    15 AuthUserFile /etc/httpd/passwords
    16 Require valid-user

    再访问http://192.168.1.12/test/ 
    会跳出身份认证窗口,输入用户名密码,即可访问目录

    .htaccess 目录限制的配置 
    要使用.htaccess文件,先在将httpd.conf中建立

    <Directory > 
    </Directory>

     1 <Directory "/home/macg/www/test">   
     2         Options All            
     3 允许对目录的操作,ALL---所有操作
     4 
     5     AllowOverride all                      
     6 AllowOverride all----允许.htaccess所有指令,缺省是all
     7 AllowOverride None ----完全忽略.htaccess文件
     8 
     9 </Directory>

    用/usr/bin/htpasswd创建一个用于认证的密码文件。 
    并且这个文件不应该置于DocumentRoot目录下,以避免被下载。 
    建议创建在/etc/httpd/目录下:

     1 [root@localhost httpd]# /usr/bin/htpasswd -c 
     2 /etc/httpd/passwords macg
     3           -c建立文件
     4 New password:
     5 Re-type new password:
     6 Adding password for user macg
     7 [root@localhost httpd]# /usr/bin/htpasswd 
     8 /etc/httpd/passwords gary  
     9                             没有-c就是单纯的adduser 追加用户
    10 New password:
    11 Re-type new password:
    12 Adding password for user gary
    13 [root@localhost httpd]# more /etc/httpd/passwords
    14 macg:U8jCwSsZyAB2g
    15 gary:06yCDyg7AijlM

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

     1 [root@localhost test]# ls -a
     2 .  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  .htaccess  
     3 slade1.html  slade2.html  slade3.html  slade4.html  
     4 slade5.html
     5 
     6 [root@localhost test]# more .htaccess
     7 authType Basic
     8 authType--------认证类型
     9      由mod_auth_basic提供的Basic
    10 Basic认证方法并不加密来自用户浏览器的密码(明文传输) 更安全的认证方法"AuthType Digest",即由mod_auth_digest供的摘要认证
    11 最新的浏览器版本才支持MD5认证
    12 (认证,服务器响应速度会受一些影响,一般有几百个用户就会对响应速度有非常明显的影响)
    13 
    14 
    15 
    16 AuthName "Restricted Files"
    17 AuthName "会员区"
    18 此句是显示给用户看的
    19 
    20 AuthUserFile /etc/httpd/passwords
    21 此目录接受passwords内定义用户的认证请求
    22 or
    23 Require macg
    24 此目录只接受单一用户macg(unix用户)认证请求

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

     1 <Directory "/home/macg/www/test">   
     2         Options All            
     3         AllowOverride all                      
     4 </Directory>
     5   Options指令-------目录的访问特性
     6 option  none    禁止对目录的所有操作
     7 option all      允许对目录的所有操作,ALL---所有操作
     8 option ExecCGI    对该目录,可以执行cgi脚本
     9 option Indexes    允许访问该目录(而该目录没有index.html)时,返回目录下的文件列表                        
    10 option FollowSymLinks       只允许对目录的FollowSymLinks操作
    11    AllowOverride指令
    12 None    不读取.htaccess
    13 all    all----允许.htaccess所有指令,缺省是all
    14 Limit    .htaccess函盖具体限定的主机(allow,deny)
    15 AuthConfig    .htaccess函盖跟认证有关指令(AuthType,AuthName) 

    <Directory ></Directory> 对下面的所有子目录也生效

    所以httpd.conf中先对根目录/进行配置,等于是设置缺省配置

     1 httpd.conf中先对根目录/进行配置,等于是设置缺省配置
     2 
     3 <Directory />                                  
     4     Options FollowSymLinks  禁止对目录的访问(option只允许对目录的FollowSymLinks操作)
     5     AllowOverride None      不读取.htaccess
     6     Order deny,allow        deny all
     7     Deny from all               
     8 
     9 </Directory>
    10 
    11 
    12 <Directory "/usr/local/apache2/htdocs">
    13 
    14     Options Indexes FollowSymLinks   只允许访问index和连接   
    15     AllowOverride None
    16     Order allow,deny       承接父目录(/)的deny all,这里也是deny all
    17     Allow from all           
    18 
    19 </Directory>

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

     1 Apache模块 mod_authz_host   
     2 <Directory /docroot>
     3 Order Deny,Allow
     4 Deny from ...
     5 Allow from ...
     6 
     7 </Directory> 
     8   注意顺序:
     9 除了后面allow的,其他都deny
    10 典型的封IP
    11 Order Allow,Deny
    12 Allow from all
    13 Deny from 205.252.46.165            
    14 注意顺序:
    15 除了后面deny的,其他都allow
    16 
    17 Deny from 192.168.2       典型的封网段

    上面清楚了 可以设置一个例子

    Apache对于多虚拟主机以及多虚拟路径的配置

     1 ServerName localhost
     2 <Directory />
     3     AllowOverride none
     4     Require all denied 
     5 </Directory>
     6 DocumentRoot "/home/work/"
     7 
     8 ## 保证所有的项目都放在/home/work/目录, 该目录只做配置
     9 <Directory "/home/work/">
    10     Options None
    11     AllowOverride None
    12     Require all denied 
    13 </Directory>

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

     1 # 没有商量, 必须放在httpd.conf中申明的根路径
     2 # 不需要severName配置
     3 
     4 <VirtualHost 127.0.0.1:8800>
     5     DocumentRoot "/home/work/www/htdocs"
     6     <Directory /home/work/www/htdocs>
     7         AllowOverride none
     8         Require all granted
     9     </Directory>
    10 </VirtualHost>
    11 
    12 ##如果不需要多主机支持,到此为止

    添加虚拟主机,虚拟目录等等

     1 ## 说明: local.baidu.com 为第一个主机名, 如果多个域名映射设置ServerAlias即可
     2 ## Alias 注意“/”的位置
     3 
     4 <VirtualHost local.baidu.com:8800>
     5     DocumentRoot "/home/work/workspace"
     6     ServerName local.baidu.com
     7     # ServerAlias local.baidu.com.cn local.baidu.cn
     8 
     9     <Directory /home/work/workspace>
    10         Options FollowSymLinks
    11         AllowOverride none
    12         Require all granted 
    13     </Directory>
    14 
    15     Alias /phpMyAdmin "/home/work/www/htdocs/phpMyAdmin/"
    16 
    17     # 添加一个日志分析, rotatelogs需要自己安装
    18     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 
    19     CustomLog "|/usr/sbin/rotatelogs logs/seo_%Y%m%d.log 86400 480" seo
    20 </VirtualHost>
    21 
    22 ## 同上其他主机配置

    当然对于该目录下个各种配置属性 不过下面这个是2.2的属性 在2.4中进行了少许的变更 所以2.4还是要查询文档 不过有下面的解释打底应该很容易

    Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合
    Directory, Location, Files等),用来控制目录和文件的访问授权。
    所以,最常用的是:
    Order Deny,Allow
    Allow from All

    注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出
    错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有
    禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直
    接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开
    放所有内容的访问权。

    按照上面的解释,下面的设定是无条件禁止访问:

    1 Order Allow,Deny
    2 Deny from All

    如果要禁止部分内容的访问,其他的全部开放:

    1 Order Deny,Allow
    2 Deny from ip1 ip2
    3 或者
    4 Order Allow,Deny
    5 Allow from all
    6 Deny from ip1 ip2

    apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽
    然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还
    需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止
    了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和
    改正方式:

    1 Order Deny,Allow
    2 Allow from all
    3 Deny from domain.org

    错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在 
    处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。 
    解决方法:Order Allow,Deny,后面两句不动,即可。

    1 Order Allow,Deny
    2 Allow from ip1
    3 Deny from all

    错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由
    于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显
    包含了ip1(all include ip1),所以所有的访问都被禁止了。
    解决方法一:直接去掉第三句。
    解决方法二:

    1 Order Deny,Allow
    2 Deny from all
    3 Allow from ip1

    下面是测试过的例子:

      1 --------------------------------
      2 Order deny,allow
      3 allow from all
      4 deny from 219.204.253.8
      5 全部都可以通行
      6 
      7 -------------------------------
      8 Order deny,allow
      9 deny from 219.204.253.8
     10 allow from all
     11 全部都可以通行
     12 
     13 -------------------------------
     14 Order allow,deny
     15 deny from 219.204.253.8
     16 allow from all
     17 只有219.204.253.8不能通行
     18 
     19 -------------------------------
     20 Order allow,deny
     21 allow from all
     22 deny from 219.204.253.8
     23 只有219.204.253.8不能通行
     24 
     25 -------------------------------
     26 
     27 -------------------------------
     28 Order allow,deny
     29 deny from all
     30 allow from 219.204.253.8
     31 全部都不能通行 
     32 
     33 -------------------------------
     34 Order allow,deny
     35 allow from 219.204.253.8
     36 deny from all
     37 全部都不能通行 
     38 
     39 -------------------------------
     40 Order deny,allow
     41 allow from 219.204.253.8
     42 deny from all
     43 只允许219.204.253.8通行 
     44 
     45 -------------------------------
     46 Order deny,allow
     47 deny from all
     48 allow from 219.204.253.8
     49 只允许219.204.253.8通行 
     50 
     51 -------------------------------
     52 
     53 --------------------------------
     54 Order deny,allow
     55 全部都可以通行(默认的)
     56 
     57 -------------------------------
     58 Order allow,deny
     59 全部都不能通行(默认的)
     60 
     61 -------------------------------
     62 Order allow,deny
     63 deny from all
     64 全部都不能通行
     65 
     66 -------------------------------
     67 Order deny,allow
     68 deny from all
     69 全部都不能通行
     70 
     71 -------------------------------
     72 
     73 对于上面两种情况,如果换成allow from all,则全部都可以通行!
     74 
     75 -------------------------------
     76 Order deny,allow
     77 deny from 219.204.253.8
     78 只有219.204.253.8不能通行
     79 
     80 -------------------------------
     81 Order allow,deny
     82 deny from 219.204.253.8
     83 全部都不能通行
     84 
     85 -------------------------------
     86 Order allow,deny
     87 allow from 219.204.253.8
     88 只允许219.204.253.8通行
     89 
     90 -------------------------------
     91 Order deny,allow
     92 allow from 219.204.253.8
     93 全部都可以通行
     94 
     95 -------------------------------
     96 
     97 -------------------------------
     98 order deny,allow
     99 allow from 218.20.253.2
    100 deny from 218.20
    101 代表拒绝218.20开头的IP,但允许218.20.253.2通过;而其它非218.20开头的IP也都允许通过。
    102 
    103 -------------------------------
    104 order allow,deny
    105 allow from 218.20.253.2
    106 deny from 218.20

    和上面的差不多,只是掉换的order语句中的allow、deny先后顺序,但最
    终结果表示全部都拒绝!

    前段时间做了个Apache的HTTP代理服务器,其中的order allow,deny这
    部分弄的不太懂,于是上网找资料看,谁知道越看越糊涂,其中有些难以分
    辨对错甚至是误导。就像破解windows系统密码的一些文章那样,很多都是
    人云亦云的,并没有经过测试。废话少说,先把我经过测试后分析总结出来
    的结论show出来,相信这对大家的理解非常有帮助。

  • 相关阅读:
    Unity3d设置QualitySettings为Beautiful Xcode发布错误
    滚轮拉近相机
    (转)oracle
    (转)Oracle存储过程基本语法
    (转)Oracle执行字符串
    (转)Oracle 临时表用法
    安装包范例
    (转)使用PowerDesigner生成HTML功能
    (转)winform下TCP通信的简单应用
    (转)winform下UPD通信的简单应用
  • 原文地址:https://www.cnblogs.com/usays/p/10126202.html
Copyright © 2011-2022 走看看