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. StringBuffer与StringBuilder的区别比较

    关于AbstractStringBuilder 首先通过查看源码发现,StringBuffer与StringBuilder都继承自AbstractStringBuilder抽象类.而AbstractS ...

  2. HDU4622 (查询一段字符串的不同子串个数,后缀自动机)

    http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给出一个字符串和q次询问,每次询问[l,r]区间内不同子串的个数 分析: N<=2000. 我 ...

  3. JAVA中 this关键字的用法

    this 在类中就是代表当前对象,可以通过 this 关键字完成当前对象的成员属性.成员方法和构造方法的调用. 那么何时用 this? 当在定义类中的方法时,如果需要调用该类对象,就可以用 this来 ...

  4. 爱漂泊人生 30个php操作redis常用方法代码例子

    http://www.justwinit.cn/post/8789/ 背景:redis这个新产品在sns时很火,而memcache早就存在, 但redis提供出来的功能,好多网站均把它当memcach ...

  5. ubuntu下nodejs环境搭建

    #0.0.0.0 account.jetbrains.com”添加到hosts文件中 apt-get升级 sudo apt-get upgrade apt-get更新 sudo apt-get upd ...

  6. mysql 01

    CREATE TABLE student(sid INT,sname VARCHAR(10),ssex CHAR(2) )/*插入数据*/INSERT INTO student VALUES(1,'袁 ...

  7. [JAVA]流控及超流控后的延迟处理

    流控检查(每半秒累计,因此最小留空阀值只能做到每秒2条): import java.text.SimpleDateFormat; import java.util.Date; import java. ...

  8. DataBind()方法实现数据绑定

    在为.aspx页上的对象设置了特定数据源之后,必须将数据绑定到这些数据源上.可以使用“Page.DataBind()”或“控件.DataBind()”方法将数据绑定到数据源上. 主要差别在于:调用Pa ...

  9. 【ExtJS】contentEl的使用

    contentEl 指定一个已存在的HTML元素, 或者一个已存在HTML元素的 id , 它们将被用作当前组件的内容. 此配置选项被用来将一个已存在的HTML元素 插入到一个新组件(在组件渲染之后它 ...

  10. 修改Windows远程桌面端口

    要修改注册表中的两处 PortNumber 1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdp ...