在整完apache和tomcat的之后我觉得有必要把<directory>
和它下面的属性捋顺一下
如何访问根目录下的目录http://192.168.1.12/test/
第一.缺省apache不允许访问http目录(没有定义,就没有访
问权限)
1 访问目录http://192.168.1.12/test/2 会显示:3 Forbidden4 You don‘t have permission to access /test/ on this server.
第二.无限制目录访问
在httpd.conf中增加定义,即可打开无限制的目录访问权限
1 <Directory /home/macg/www/test>2 ????Options All3 ????AllowOverride all4 </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 8017 ---------------------
实际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.html11 12 [root@localhost test]# more .htaccess13 authType Basic14 AuthName "Restricted Files"15 AuthUserFile /etc/httpd/passwords16 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 gary13 [root@localhost httpd]# more /etc/httpd/passwords14 macg:U8jCwSsZyAB2g15 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提供的Basic10 Basic认证方法并不加密来自用户浏览器的密码(明文传输) 更安全的认证方法"AuthType Digest",即由mod_auth_digest供的摘要认证11 最新的浏览器版本才支持MD5认证12 (认证,服务器响应速度会受一些影响,一般有几百个用户就会对响应速度有非常明显的影响)13 14 15 16 AuthName "Restricted Files"17 AuthName "会员区"18 此句是显示给用户看的19 20 AuthUserFile /etc/httpd/passwords21 此目录接受passwords内定义用户的认证请求22 or23 Require macg24 此目录只接受单一用户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 ???不读取.htaccess13 all ???all----允许.htaccess所有指令,缺省是all14 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 None16 ????Order allow,deny ??????承接父目录(/)的deny all,这里也是deny all17 ????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的,其他都deny10 典型的封IP11 Order Allow,Deny12 Allow from all13 Deny from 205.252.46.165 ???????????14 注意顺序:15 除了后面deny的,其他都allow16 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 None11 ????AllowOverride None12 ????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 FollowSymLinks11 ????????AllowOverride none12 ????????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" seo20 </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,Deny2 Deny from All
如果要禁止部分内容的访问,其他的全部开放:
1 Order Deny,Allow2 Deny from ip1 ip23 或者4 Order Allow,Deny5 Allow from all6 Deny from ip1 ip2
apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽
然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还
需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止
了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和
改正方式:
1 Order Deny,Allow2 Allow from all3 Deny from domain.org
错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在
处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。
解决方法:Order Allow,Deny,后面两句不动,即可。
1 Order Allow,Deny2 Allow from ip13 Deny from all
错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由
于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显
包含了ip1(all include ip1),所以所有的访问都被禁止了。
解决方法一:直接去掉第三句。
解决方法二:
1 Order Deny,Allow2 Deny from all3 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.2100 deny from 218.20101 代表拒绝218.20开头的IP,但允许218.20.253.2通过;而其它非218.20开头的IP也都允许通过。102 103 -------------------------------104 order allow,deny105 allow from 218.20.253.2106 deny from 218.20
和上面的差不多,只是掉换的order语句中的allow、deny先后顺序,但最
终结果表示全部都拒绝!
前段时间做了个Apache的HTTP代理服务器,其中的order allow,deny这
部分弄的不太懂,于是上网找资料看,谁知道越看越糊涂,其中有些难以分
辨对错甚至是误导。就像破解windows系统密码的一些文章那样,很多都是
人云亦云的,并没有经过测试。废话少说,先把我经过测试后分析总结出来
的结论show出来,相信这对大家的理解非常有帮助。
apache的<directory>语句以及属性的含义
原文地址:https://www.cnblogs.com/usays/p/10126202.html