关闭

apache的<directory>语句以及属性的含义

时间: 2018-12-16阅读: 773标签: 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 "/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先后顺序,但最 终结果表示全部都拒绝!

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


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1616

关闭

Apache中.htaccess文件利用的总结与新思路拓展

在普遍使用的LAMP架构中,Apache与PHP之间的交互,有三种常见的方式。第一种是最通用最常见的Module方式,即在httpd.conf中使用LoadModule的方式,将php的dll或者so文件加载到apache当中。

apache反向代理出现502调整

项目上线后,会在接口调用时客户端出现502异常,而服务端则对该此请求作出处理。经过排查后得知是由于请求并发量大,造成超过请求超时间,但是apache中队列已经加载到请求信息,所有会对请求作出处理。

apache开启对gzip的支持

配置后会优先使用同名的压缩文件返回到浏览器端,浏览器进行解压,由于文件体积减小了,从而大大提高了对文件的加载速度。

Apache 的访问控制配置

客户机地址限制:通过 Require 配置项,可以根据主机的主机名或IP地址来决定是否允许客户端访问,在 httpd服务器的主配置文件的 <Location>、<Directory>、<Files>、<Limit>

Apache Forbidden 403错误提示

在配置Linux的 Apache服务时,经常会遇到http403错误,我今天配置测试时也出现了,最后解决了,总结了一下。http 403错误是拒绝访问的意思,有很多原因的。还有,这些问题在win平台的Apache里一样会发生

Apache 配置虚拟主机三种方式

假设服务器有个IP地址为192.168.1.10,使用ifconfig在同一个网络接口eth0上绑定3个IP;修改hosts文件,添加三个域名与之一一对应。基于主机名:设置域名映射同一个IP,修改hosts

Apache2简单配置

Apache2进行简单配置:安装Apache2、启动服务、配置虚拟站点_在sites-available目录下配置自己的虚拟站点、进入sites-avaliable目录后,有两个默认的配置文件

Apache开启gzip压缩

服务器设置 gzip 压缩是 web 开发中很普遍的做法。使用gzip压缩后可以使需要加载的文件大小缩小到原来的1/4左右(最大压缩级别)。然后在客户端解压即可。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!