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. BZOJ1688 Disease Manangement 疾病管理

    Disease Manangement 疾病管理   Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D ...

  2. git 修改配置

    git config 查看配置信息 config 配置项帮助信息 $ git config config 配置有system级别 global(用户级别) 和local(当前仓库)三个设置项 从sys ...

  3. 动态树Link-cut tree(LCT)总结

    动态树是个好玩的东西 LCT题集 预备知识 Splay 树链剖分(好像关系并不大) 动态树(Link-cut tree) 先搬dalao博客 什么是LCT? 动态树是一类要求维护森林的连通性的题的总称 ...

  4. Codeforces - tag::graphs 大合集 [占坑]

    520B 给定初始n和目标m,存在两种操作\(-1\)和\(×2\),要求最少操作次数 无脑解法是BFS,不能解决稍大的规模 当n>m时,输出n-m 否则逆向处理,转换为m到n的最小操作次数,存 ...

  5. mac 上安装vue模版-D2 Admin

    1.首先下拉模版,打开mac自带“终端” 2.安装项目 3.出现的错误 4.启动项目

  6. (转)Http状态码301和302概念简单区别及企业应用案例

    Http状态码301和302的区别及企业应用案例 原文:http://blog.51cto.com/oldboy/1774260 1.什么是301重定向? 301重定向/跳转一般,表示本网页永久性转移 ...

  7. spring、springmvc和mybatis整合(xml方式)

    今天搭建一个基于xml的ssm整合demo.话不多说,直接上代码. 我的开发环境如下: web服务器:tomcat8 开发工具:STS JDK版本:1.8 项目构建工具:maven 1.pom.xml ...

  8. 2019第九届MathorCup数学建模

    题目下载:https://www.lanzous.com/i3taz2j 总共四个问题 问题1 首先附件一中的数据,拿到后肯定感觉棘手.我们的处理方法: 在下面缺失数据的地方我们都认为是问题3中的预测 ...

  9. JavaScript中类型检测

    文章首发: http://www.cnblogs.com/sprying/p/4349426.html 本文罗列了一般Js类型检测的方法,是构建Js知识体系的一小块,这篇文章是我很早之前总结的. 一. ...

  10. HTML页面中嵌入SVG

    HTML页面中嵌入SVG的几种方式 你有N种理由使用SVG在页面中展示图像,如它的矢量特性.广泛的浏览器支持.比JPEG和PNG更小的体积.可用CSS设置外观.使用DOM API操作以及各种可用的SV ...