即使是程序员,多多少少不可避免的要和apache服务器打交道。那么首先我们需要了解的就是apache的配置文件,要不然一切就无从谈起。初学者往往在几次失败之后就觉得很复杂。下面针对一些会让人经常困惑的问题进行总结:
什么是apache的配置文件,保存在什么位置,可以有多少个配置文件,使用什么语法?
事实上,apache的配置文件简单说来也不过是一个包含配置指令的普通文本文件;一般命名为httpd.conf,它的保存位置在哪里?这个不是固定的。不仅在linux,window系统下它们的位置不一样,而且即使在window系统下它们的位置也不是固定的。事实上,配置文件的位置是在编译时确定的,它也可以在运行httpd服务器时通过-f参数指定一个配置文件,如果是这样的话,这个配置文件名和位置就只能通过查看进程执行的命令才能知晓了。
httpd -f path/to/config-file
一个apache服务器可以有多少个配置文件。一般情况下,它会有一个主要的同时也是全局的httpd.conf配置文件,它还可以通过include指令来加载多个(可以使用通配符)配置文件。需要注意的一点是,对这些配置文件修改只有在启动或者重新启动apache服务器时生效。
修改apache的配置文件时,你可以通过#来注释掉某个指令行,或者用它来添加注释信息。如果有命令需要换行可以在结尾使用/,反斜杠说明这一行的命令还末结束,和下一行是连在一起的,不过要注释反斜杠后面不能再有其它字符,包括空格。需要注意的是配置指令不分大小写,不过指令的参数通常是分大小写的。修改后你可以通过执行下面的命令来查看配置文件是否有语法错误,然后再重新启动apache服务器让修改生效。
httpd -t
配置指令的依赖和作用范围
由于apache服务器本身是基于模块化的,所以它的很多功能也是通过加载模块来实现的,它本身只具备一些最基本的功能。我们可以在编译apache的时候指定要使用哪些模块,也可以将apache编译成可以动态载入模块,这样我们可以在任何时候编译需要的模块,然后使用LoadModule指令载入模块。否则,我们每次需要添加或删除模块时都必须重新编译安装apache。
正是由于apache的模块化,我们不能确定哪些模块是否存在,那么针对这些模块的特殊指令就不一定能使用,这就是配置指令的对模块的依赖。apache提供了<IfModule></IfModule>可以判断某个特定模块是否被载入来进行条件配置。
注:你可以通过 httpd -l 命令来查看apache目前编译了哪些模块(而不是加载了哪些)。
谈到配置指令的作用范围。我们需要进一步了解apache服务器。我们装一个apache服务器可以服务多个站点。也就是说多个站点可以放在同一个 apache服务器上,普通的指令是作用于整个服务器,也就是说对所有的站点都起作用。不过,我们可以通过<Directory>,<DirectoryMatch>,<Files>,<FilesMatch>,<Location>,<LocationMatch>,<VirtualHost>将配置指令的作用范围缩小到某个目录(某些匹配目录),文件(某些匹配文件),或某个特定位置(某些匹配位置)。这个时候我们需要使用这些指令将配置指令包含起来。
<Directory /var/www>
Options Indexes FollowSymLinks
</Directory>
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
.htaccess文件
apache还允许我们在某个特定的目录下使用.htaccess文件对目录进行特定配置。事实.htaccess不一定就是叫.htaccess,我可以通过AccessFileName来指定一个名称,然后在需要进行特定配置的目录下创建文件,并在文件中进行配置。由于.htaccess文件是在每次请求中读取的,所以对它的修改会立即生效而不需要重启apache服务器。绝大部分的指令都可以使用在.htaccess文件中,不过管理员可以通过AllowOverride来决定哪些命令可以被使用在apache服务器中。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。