1.<IfModule>容器

  <IfModule>容器作用于模块,它会首先判断模块是否载入,然后再决定是否进行处理,也就是说只有当判断结果为真时才会执行容器内的指令,相反如果为假,则会全部忽略。可以使用<IfModule 模块名> 或 <IfModule !模块名> 来判断模块是否载入。例如:

() <IfModule !mpm_netware_module>
() <IfModule mpm_netware_module>

在第一种情况下,<IfModule> 容器会判断,如果载入了 mpm_netware_module 模块则不执行容器内的指令。第二种情况下,当 mpm_netware_module 被载入则执行容器内的指令,来看下面的例子:

<IfModule dir_module>
DirectoryIndex index.hmtl
</IfModule>

在这个例子中,<IfModule>会判断 dir_module 是否载入,如果载入则会执行 DirectoryIndex  index.html 指令。

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon
Group daemon
</IfModule>
</IfModule>

  在上面的例子中,<IfModule>容器会首先判断 mpm_netware_module 模块是否载入,如果没有载入,会继续执行容器的下一条,判断 mpm_winnt_module 模块是否载入,当 mpm_winnt_module 也没有载入时,<IfModule> 容器内的 user 与 group 指令就会被执行。

2.<IfDefine>容器

  <IfDefine>容器与<IfModule>容器类似,都是对条件进行判断,只不过<IfDefine> 容器只有当条件判断为真时才会执行,而且它还需要在 httpd 启动时加上特定的参数才能起作用。

(i)

<IfDefine  Proxy>
LoadModule proxy_module modules/libproxy.so
</IfDefine>

要向是上述命令生效,启动 httpd 时的语句应该如下所示:

# httpd -D Proxy

(ii)

<IfDefine !Proxy>
LoadModule proxy_module modules/libproxy.so
</IfDefine>
# httpd -D Proxy

  在这个例子中,<IfDefine !Proxy> 容器中的 !Proxy 与之前相比多了一个 “!”,于是它与之前的例子完全相反,<IfDefine !Proxy> 容器内的设置会被忽略掉。

3. <Directory> 与 <DirectoryMatch> 容器

  <Directory>容器的作用就是让它所封装的指令在指定的目录以及它的子目录中起作用,这个目录必须是一个完整的路径,当然也可以使用通配符 "*"、"?" 匹配目录,也可以使用 "[]" 来确定字符范围,不过无论是"*"、"?" , 还是 "[]" 都不能匹配 "/",例如,<Directory /srv/*/html/index.html> 不能匹配 <Directory /srv/*/index.html>,而只能匹配<Directory /srv/apache/html/index.html> 或是 <Directory /srv/username/html/index.html> 。

<Directory /srv/apache/html/>
Order Deny,Allow
Deny from All
</Directory>

  在上面的例子中,禁止了对 /srv/apache/html/ 目录的访问权限,任何请求到 /srv/apache/html/ 的链接都会被拒绝。

  除了上面所提到的通配符和"[]" 之外,还可以通过在正则表达式的前面加上"~" 来使用正则表达式进行匹配,例如:

<Directory  ~"^/srv/apache[0-9]{2}/html/">
Order Deny,Allow
Allow from All
</Directory>

  在上面的例子中,通过使用正则表达式来匹配 /srv/ 下所有以 apache 开头以0至9结尾的两位数字的目录下的 /html/ 目录并允许这些目录被任何用户访问,这个容器的URL请求类似于下面的链接:

http://www.sitename.com/srv/apache00/html

http://www.sitename.com/srv/apache01/html

..............................................
.............................................. http://www.sitename.com/srv/apache99/html

<DirectoryMatch> 容器与 <Directory> 容器的作用相似,都是作用于目录,只是 <DirectoryMatch>容器可以直接接受正则表达式,而无须加上"~",例如:

<DirectoryMatch "^/srv/apache[0-9]{2}/html/">
Order Deny,Allow
Allow from All
</DirectoryMatch>

4. <Files> 与 <FilesMatch> 容器

  与<Directory>容器作用于目录相对应,<Files>容器只作用于文件,和<Directory>容器一样,也可以使用通配符和"[]" 以及在正则表达式的前面加上"~" 来使用正则表达式进行文件匹配。例如,匹配所有的以 .html 后缀结尾的文件并允许所有用户访问:

<Files "^\.html">
Order Deny,Allow
Allow from All
</Files>

<FilesMatch>容器与<Files>容器类似,只是它除了有<Files>容器的功能外,还能直接使用正则表达式来进行匹配。

<FilesMatch "\.(gif|jpe?g|png)$">
Order Deny,Allow
Allow from All
</FilesMatch>

5. <Location>与<LocationMatch>容器

<Location>与<LocationMatch>容器的作用是对URL进行访问控制。

例如:

<Location /cgi>
Order Allow,Deny
Deny from All
</Location>

  在上面的例子中,<Location>容器会首先对到来的URL请求进行匹配,如果是以 /cgi 开头的URL则会全部拒绝,例如:

http://www.sitename.com/cgi
http://www.sitename.com/cgi-bin
http://www.sitename.com/cgi/www/index.html

  除此之外,还可以通过<Location>容器将URL请求映射到Apache模块处理器上,例如,使用Apache自带的 mod_status 模块:

<Location /server-status>
SetHandler server-status
</Location>

  如果使用上面的容器来设置,那么访问 http://www.sitename.com/server-status时,Apache会将链接交给 mod_status 模块处理,并返回一个Apache服务器运行状态页面。

Apache服务器运维笔记(3)----容器部分的更多相关文章

  1. Apache服务器运维笔记(5)----容器的处理顺序

    容器在配置文件中是可以多次使用的,同时也可以嵌套使用,但是 Apache 在处理容器时却是有一定顺序的,因此在编写容器配置时需要按照一定的顺序来进行,否则Apache处理的结果很可能不是管理员想要的. ...

  2. Apache服务器运维笔记(2)----使用<IfDefine>容器实现不同的配置

    还有一种方法用来实现不同配置的Apache服务器启动,就是在一个配置文件中使用<IfDefine name> ... </IfDefine> 容器来定义,在<IfDefi ...

  3. Apache服务器运维笔记(2)----使用apxs来进行编译安装 mod_txt 模块

    mod_txt是一个非常有趣的模块,它实现了文本的输出过滤器,它可以在指定类型的网页上,将你指定的txt文件显示在网页的头部和尾部. 在它的主页 http://apache.webthing.com/ ...

  4. Apache服务器运维笔记(1)----运行多个Apache服务器

    所有的Apache管理员都会遇到一个问题,就是在一台物理系统上运行多个版本的Apache服务器,或是运行多个同一版本的Apache服务器的副本,对于前者,在编译时为不同版本的Apache指定不同的安装 ...

  5. Apache服务器运维笔记(6)----目录 文件 网络容器的安全问题

    <Directory>.<Files>.<Location> 这三个容器的作用都很相似,都是以容器的形式来封装一组指令对访问进行控制,只是它们的区别在于作用于目录. ...

  6. Apache服务器运维笔记(4)----服务器扩展部分

    在Apache的默认配置文件夹中有一个 extra 目录,这个目录是用来存放 Apache 其他模块的配置文件的.这些文件是 Apache 针对常用的模块而设置并提供的,它们都是通过 Include ...

  7. 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记

    首先,这本书是Linux.CN赠送的,多谢啦~ http://linux.cn/thread-12733-1-1.html http://linux.cn/thread-12754-1-1.html ...

  8. 运维笔记--postgresql占用CPU问题定位

    运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...

  9. 谈谈我的windows服务器运维管理

    我们开发的页游General War(http://gw.gamebox.com)上线运营也有半年多了,服务器的开发到运维基本都由我一手包办,在服务器上线之后我们又招了一个程序员接手后续功能的开发,而 ...

随机推荐

  1. 浅谈SLAM的回环检测技术

    什么是回环检测? 在讲解回环检测前,我们先来了解下回环的概念.在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说 ...

  2. flask实战-个人博客-使用类组织配置

    使用类组织配置 在实际需求中,我们往往需要不同的配置组合.例如,开发用的配置,测试用的配置,生产环境用的配置.为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配 ...

  3. 数组其他部分及java常见排序

    数据结构的基本概述: 数据结构是讲什么,其实大概就分为两点: 1.数据与数据之间的逻辑关系:集合.一对一.一对多.多对多 2.数据的存储结构: 一对一的:线性表:顺序表(比如:数组).链表.栈(先进后 ...

  4. Linux串口驱动程序设计

    1. 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. (1)串口终端(/dev/ttyS*):串口终端是使用计算机串口连接的终端设备.Linux把每 ...

  5. spark第十篇:Spark与Kafka整合

    spark与kafka整合需要引入spark-streaming-kafka.jar,该jar根据kafka版本有2个分支,分别是spark-streaming-kafka-0-8和spark-str ...

  6. C# 字符串转枚举类型

    Enum.Parse(typeof(枚举类型), 字符串类型) 如:在Unity中, Enum.Parse(typeof(SystemLanguage), "Chinese")

  7. vue-quill-editor html编辑器

    在Vue项目使用quill-editor带样式编辑器(更改插入图片和视频)  https://www.cnblogs.com/zhengweijie/p/7305903.html   vue-quil ...

  8. Ubuntu下配置安装Hadoop 2.2

    ---恢复内容开始--- 这两天玩Hadoop,之前在我的Mac上配置了好长时间都没成功的Hadoop环境,今天想在win7 虚拟机下的Ubuntu12.04 64位机下配置, 然后再建一个组群看一看 ...

  9. Zookeeper概念学习系列之分布式事务

    不多说,直接上干货! 初学者来说,肯定会有这么一个疑问.为什么会在zookeeper里牵扯到分布式事务? zookeeper到底是什么? zookeeper实际上是yahoo开发的,用于分布式中一致性 ...

  10. 深入java虚拟机学习 -- 类的卸载

    类的生命周期 在开始本节之前让我们再来回顾下类的生命周期 没看过前6个过程的同学建议从头看下<深入java虚拟机学习 -- 类的加载机制>,这里就不再过多介绍了,着重说下类的卸载 类的卸载 ...