Apache配置文件中的deny与allow小结

今天在公司配置Zend本地Apache环境的时候,发现在zend.conf中的权限控制中的几段句子,如下所示:

复制代码代码如下:

<Location /server-status>  
    SetHandler server-status   
    Order deny,allow   
    Deny from all   
    Allow from 127.0.0.1   
</Location>

自己在配置虚拟主机的时候需要配置VirtualHost,

复制代码代码如下:

<VirtualHost *:80>  
    ServerName backend   
    DocumentRoot "D:/Program Files/Zend/Apache2/htdocs/public"   
    SetEnv APPLICATION_ENV "development"   
    <Directory "D:/Program Files/Zend/Apache2/htdocs/public">  
        DirectoryIndex index.php   
        AllowOverride All   
        Order allow,deny   
        Allow from all   
    </Directory>  
</VirtualHost>

两段Order语句的不同引起了我的兴趣,那么到底这里的顺序是怎样执行的呢?先前联想到了“短路”的概念,有相同,也有不同,下面用几个例子来分析一下。

复制代码代码如下:

Order deny,allow            
    –(注意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不能通过 。

根据Apache官网的 解释,allow方向影响的是可以通过一个服务器区域的主机,这个主机可以通过主机名(hostname)、IP地址、IP地址范围或者通过其他的客户端 请求条件。与之相反的正是deny,deny控制的是不被服务器所允许的主机,deny的识别方式也是主机名(hostname)、IP地址及范围、或者 环境变量等。而位于顶层的Order起到的作用就是制定规则。比如上面案例1中,我们的Order为先检查deny后检查allow,那么我们可以把下面 的两句话当做一个list,这两句话没有自然的先后顺序,即检查deny时候,我们发现219.204.253.8这台主机是满足拒绝条件的,那么就进行 第二步检测,即allow的检查,发现allow做的事情是:allow from all,意思即全部来源都可以获得通过。这里的关键是,一切访客进来之后都不是一棒子打死的,都要经过两步验证,那么可以发现全部机器都是可以获得通过 的,与结果一致。

案例2中,Order顺序是先deny后allow,那么我们的步骤即在deny规则里面发现219.204.253.8是满足deny规则的,那 么进入第二步检查,发现依然是allow all,结果同样是全部允许。这里我们可以得到的结论是,Order语句之后的两个from语句的自然先后顺序是没有关系的,检查的顺序完全是按照 Order事先约定好的进行。

这样来看案例3就比较容易了,我们的Order是先allow后deny,那么deny具有最终决定权,即在allow说通过之后各个访客还需要进行拒绝检查,发现219.204.253.8这台主机是不满足的,那么进行拒绝。案例4可以用同样的方法进行分析。

时间: 2024-10-26 20:15:50

Apache配置文件中的deny与allow小结的相关文章

Apache配置文件中的deny和allow的使用

Apache配置文件中的deny和allow的使用 由于产品的需要,最近在配置apache的负载均衡功能,但是在配置虚拟主机的访问权限的时候我们遇到了一些问题.主要问题是deny和allow的执行顺序,抽时间研究了下这两个参数的使用,现把deny和allow的使用情况总结如下. 一.   使用情况总结 我们来看下下面的apache的一个配置,具体代码如下: <Directory /> Order allow,deny  #1 Allow from all #2 deny from 192.9.

修改apache配置文件去除thinkphp url中的index.php(转)

例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index.php呢? 1.httpd.conf配置文件中加载了mod_rewrite.so模块  //在APACHE里面去配置 复制代码代码如下: #LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉 2.AllowOverride None 讲N

修改apache配置文件去除thinkphp url中的index.php

例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index.php呢? 1.httpd.conf配置文件中加载了mod_rewrite.so模块  //在APACHE里面去配置 #LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉 2.AllowOverride None 讲None改为 All 

关于apache虚拟配置文件中的NameVirtualHost 标签

问题描述: 今天调整了一个apache的vhost文件,是从一个新的服务器复制过来的,启动apache服务后并没有什么报错信息,可是虚拟主机就是不生效,所有的页面都指向了vhost文件里设置的第一个主机里. 对比老服务器中的配置文件,发现少了一个  NameVirutalHost *:80,果断添加上,重启apache恢复正常. 总结: NameVirtualHost 如果没有这个,<VirtualHost>标签就没什么作用. 一个NameVirtualHost 可以对用多个<Virtu

Apache 配置文件解析及虚拟机配置示例

配置文件详细解析Apache配置文件默认位于/usr/local/apache2/conf目录下,在该目录下最主要的配置文件是httpd.conf文件,还有一些位于extra目录下的附加配置文件.此外original目录中存有所有这些配置文件的副本.Apache HTTP Sever主配置文件主要由指令以及容器组成,容器使用<容器名称>开始,</容器名称>结尾,容器的指令一般仅在局部有效.下面是对主配置文件重点指定的具体描述.SeverRoot指令ServerRoot指令设置Apa

Apache LINUX中搭建HTTP服务器

LINUX中搭建HTTP服务器 在LINUX系统中安装Apache做为HTTP的服务程序,通过设置配置文件,可以实现很多功能,如访问控制,虚似主机,基于域名的虚拟主机,通过安装Awstats我们可以更方便的统计Http访问日志 实验拓扑: Linux Client -----RHEL5.9(vmnet1)----------(vmnet1) Win7 Client 实验一:查看默认HTTP配置 找到默认红帽欢迎页面 (/etc/httpd/conf/httpd.conf ---->Include

Apache 配置文件httpd.conf 的含义

ServerRoot "/usr/local" ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerR oot定义的路径之下. ScoreBoardFile /var/run/httpd.scoreboard httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apach

Apache配置文件详解

Apache配置文件详解   *此为用yum安装的apache文件的各项解释和编译安装后的apache配置文件大同小异,仅做参考 httpd 的配置文件是: /etc/httpd/conf/httpd.conf [ //查看配置文件 # grep -v "#" /etc/httpd/conf/httpd.conf //当服务器响应主机头(header)信息时显示Apache 的版本和操作系统名称 ServerTokens OS //设置服务器的根目录 ServerRoot "

Apache配置文件详解之httpd.conf(2)

一. <directory>     </directory>语指令句 (说明:<directory>path</directory>主要是对目录文件访问权限的控制) 我们都知道Apache配置文件:httpd.conf文件中有这么几行内容,如下 <Directory />    AllowOverride none    Require all denied</Directory> 这几句内容告诉我们Apache默认对根目录的访问权