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

 更新时间:2015年01月20日 09:28:19   投稿:junjie  
这篇文章主要介绍了Apache配置文件中的deny与allow小结,本文着重讲解了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可以用同样的方法进行分析。

相关文章

  • CentOS7 配置Nginx支持HTTPS访问的实现方案

    CentOS7 配置Nginx支持HTTPS访问的实现方案

    这篇文章主要介绍了CentOS7 配置Nginx支持HTTPS访问的实现方案的相关资料,这里实现该功能的步骤进行了详解,需要的朋友可以参考下
    2016-11-11
  • 详解Linux索引节点inode

    详解Linux索引节点inode

    这篇文章主要介绍了Linux索引节点inode的相关资料,帮助大家更好的理解和学习Linux,感兴趣的朋友可以了解下
    2020-08-08
  • Ubuntu挂载3T硬盘或大于2T磁盘的方法

    Ubuntu挂载3T硬盘或大于2T磁盘的方法

    本篇文章主要介绍了Ubuntu挂载3T硬盘或大于2T磁盘的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Linux中RPM文件操作的常用命令总结

    Linux中RPM文件操作的常用命令总结

    这篇文章主要给大家介绍了关于Linux中RPM文件操作的常用命令,文中通过示例介绍的很详细,对大家的理解和学习很有帮助,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • centos7修改网关和配置ip的方法示例

    centos7修改网关和配置ip的方法示例

    这篇文章主要介绍了centos7修改网关和配置ip的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • CentOS使用本地yum源搭建LAMP环境图文教程

    CentOS使用本地yum源搭建LAMP环境图文教程

    这篇文章主要介绍了CentOS使用本地yum源搭建LAMP环境,详细分析了CentOS使用本地yum源搭建LAMP的具体步骤、相关命令及操作注意事项,需要的朋友可以参考下
    2019-06-06
  • Ubuntu18.04下将 磁盘挂载在某目录下

    Ubuntu18.04下将 磁盘挂载在某目录下

    这篇文章主要介绍了Ubuntu18.04 下将磁盘挂载在某目录下,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 在Linux中列出Systemd下所有正在运行的服务的方法指南

    在Linux中列出Systemd下所有正在运行的服务的方法指南

    Systemd是Linux的系统和服务管理器; init进程的替代品,与SysV 和LSB init脚本兼容,systemctl命令是管理systemd的主要工具,在这篇文章中,我们将演示如何 Linux中列出systemd下所有正在运行的服务,感兴趣的同学可以借鉴阅读
    2023-06-06
  • Linux passwd 命令的使用

    Linux passwd 命令的使用

    这篇文章主要介绍了Linux passwd 命令的使用,帮助大家更好的理解和学习Linux,感兴趣的朋友可以了解下
    2020-08-08
  • linux No space left on device由索引节点(inode)爆满引发500问题

    linux No space left on device由索引节点(inode)爆满引发500问题

    这篇文章主要介绍了linux No space left on device由索引节点(inode)爆满引发500问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论