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 [[email protected] test]# ls -a
 2 .  ..  bg0073.jpg  bg0135.jpg  bg0137.jpg  slade1.html
 3 slade2.html  slade3.html  slade4.html  slade5.html
 4
 5 [[email protected] test]# cp ../test1/.htaccess .
 6
 7 [[email protected] 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 [[email protected] 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 [[email protected] 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 [[email protected] 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 [[email protected] httpd]# more /etc/httpd/passwords
14 macg:U8jCwSsZyAB2g
15 gary:06yCDyg7AijlM

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

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

原文地址:https://www.cnblogs.com/usays/p/10126202.html

时间: 2024-09-28 13:36:52

apache的<directory>语句以及属性的含义的相关文章

apache配置Directory目录权限的一些配置

可以使用<Directory 目录路径>和</Directory>这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体 的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用.下面是主配置文件中设置目录权限的例子. <Directory "/var/www/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow

Android中RelativeLayout各个属性的含义

androidlayout android:layout_above="@id/xxx"        --将控件置于给定ID控件之上 android:layout_below="@id/xxx"        --将控件置于给定ID控件之下 android:layout_toLeftOf="@id/xxx"     --将控件的右边缘和给定ID控件的左边缘对齐 android:layout_toRightOf="@id/xxx&quo

Meta标签中的apple-mobile-web-app属性及含义

一.Meta标签中的apple-mobile-web-app-capable属性及含义 这meta的作用就是删除默认的苹果工具栏和菜单栏. content有两个值”yes”和”no”,当我们需要显示工具栏和菜单栏时,这个行meta就不用加了,默认就是显示. 二.Meta标签中的apple-mobile-web-app-status-bar-style属性及含义 “apple-mobile-web-app-status-bar-style”作用是控制状态栏显示样式 (默认样) 具体效果如下: st

Meta标签中的属性及含义

一.Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的format-detection属性主要是有以下几个设置: meta name="format-detection" content="telephone=no" meta name="format-detection" content="email

Meta标签中的format-detection属性及含义(转)

一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁止这一提示方法: 加入meta标签,如:<meta name="format-detection" content="telephone=no"> 同理,还会有以下相关操作: 1.禁止跳转邮箱:<meta name="format-detec

(转)Android中RelativeLayout各个属性的含义

转:http://blog.csdn.net/softkexin/article/details/5933589 android:layout_above="@id/xxx"  --将控件置于给定ID控件之上android:layout_below="@id/xxx"  --将控件置于给定ID控件之下 android:layout_toLeftOf="@id/xxx"  --将控件的右边缘和给定ID控件的左边缘对齐android:layout_t

Meta标签中的format-detection属性及含义让IPHONE的数字可以改变颜色

format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的format-detection属性主要是有以下几个设置: meta name="format-detection" content="telephone=no" meta name="format-detection" content="email=no" meta name="format

标签中的rel属性的含义

rel与rev属性相同,它们都是属于LinkTypes属性. rel 属性 -- rel属性,描述了当前页面与href所指定文档的关系, rel是relationship(关系)的英文缩写. rev 属性 -- rev属性,描述了href所指定文档与当前页面的关系, rev是reverse link(反向链接)的英文缩写. rel, rev属性通常出现在a,link标签中.1.rel是什么rel属性通常用来描述链接之间的关系,也就是说目的地址(href) 跟源(站点)之间的关系.rel属性通常出

Meta标签中的format-detection属性及含义

format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的format-detection属性主要是有以下几个设置: meta name="format-detection" content="telephone=no" meta name="format-detection" content="email=no" meta name="format