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

今天在公司配置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可以用同样的方法进行分析。

时间: 2025-01-29 19:07:54

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

apache配置文件中的##和#分别指什么意思啊?

问题描述 apache配置文件中的##和#分别指什么意思啊? 如题,apache配置文件中的##和#分别指什么意思啊?有点搞不明白怎么那么多带##的语句!

Apache服务器中.htaccess的基本配置总结_Linux

.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限制.管理员可以通过Apache的AllowOverride指令来设置. - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令. - .htaccess必须以ASCII模式上传,最好将其权限设置为644. 错误文档的定位 常用的客户端请求错误返回代码: 401 Authorizat

apache虚拟主机三种配置方式小结_Linux

使用虚拟主机必须要注释掉httpd的主机模块,即修改httd.conf的主配置文件,找到,将这段内容注释掉就可以了. apche的虚拟主机配置一共有三种,即基于IP.基于port.以及基于域名的.为了后面试验,需要配置两个IP地址(我主机现在的IP地址是10.10.50.100),命令如下: #ip addr add 10.10.50.101/16 dev eth0 #ip addr add 10.10.50.102/16 dev eth0 关于如何配置IP地址,此处不再赘述,后面我会专门写篇关

Git中需要熟记的命令小结_linux shell

提交流程相关 查看文件改动以及新增的文件 git status 添加新增文件 git add your_file_path // 添加全部文件 git add * // 添加某类型文件 git add dir/*.js 简单的提交文件 git commit -m "Commit message" 提交你所有的修改文件以及添加的文件 git commit -am 'your message' 撤销修改某个文件 git checkout -- <filename> 放弃本地所有

Apache配置文件中的LogLevel指令

LogLevel 指令 说明: 控制错误日志的详细程度 语法: LogLevel 级别 默认值: LogLevel warn 上下文: 服务器配置, 虚拟主机 状态: 核心 模块: core LogLevel用于调整记于错误日志中的信息的详细程度.(参阅ErrorLog指令).可以选择下列级别,依照重要性降序排列: Level Description Example emerg 紧急 - 系统无法使用. "Child cannot open lock file. Exiting" al

在Apache服务器中运行CGI程序的方法_Linux

关于apache与CGI在这里就不解释了. 1.apache下载地址:http://www.apache.org,下面以2.0.63为例介绍运行CGI程序的配置. 2.下载Windows下的Perl解释器ActivePerl,官方网站:http://www.activestate.com/,最新版本ActivePerl-    5.10.0.1003,假设安装路径为c:\Perl. 3.修改apache的配置文件httpd.conf: <Directory "D:/Apache Group

shell编程中的字符串截取方法小结_linux shell

一.Gnu Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr "$a" 1 8 2.echo $a|awk '{print substr(,1,8)}' 3.echo $a|cut -c1-8 4.echo $ 5.expr $a : '\(.\\).*' 6.echo $a|dd bs=1 count=8 2>/dev/null  二.按指定的字符串截取 1.第一种方法: ${varible##*string} 从左向右截取最后一个stri

Linux里awk中split函数的用法小结_linux shell

The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep. set time = 12:34:56set hr = `echo $time | awk '{split($0,a,":" ); print a[1]}'` # = 12set sec = `echo $time | awk '{split($0,a,":" ); print

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

 这篇文章主要介绍了修改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_