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出来,相信这对大家的理解非常有帮助。

  • 相关阅读:
    一个简单XQuery查询的例子
    《Microsoft Sql server 2008 Internals》读书笔记第七章Special Storage(1)
    《Microsoft Sql server 2008 Internals》读书笔记第八章The Query Optimizer(4)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(4)
    SQL Server中SMO备份数据库进度条不显示?
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(5)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(3)
    《Microsoft Sql server 2008 Internal》读书笔记第八章The Query Optimizer(2)
    省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例
    FireFox意外崩溃时的手工恢复命令
  • 原文地址:https://www.cnblogs.com/usays/p/10126202.html
Copyright © 2011-2022 走看看