2008-10-02

Apache配置文件的说明

就是./conf/httpd.conf中的配置的说明:

ServerRoot:
  指定apache的daemon的运行目录,可以理解为apache安装的目录。http启动之后会将进程的当前目录改变到这个目录。因此,这个配置文件中指定的相对路径就是这个路径的相对路径了。
  此外,由于NFS文件系统在文件加锁方面能力有向,因此,不应该把这个目录指定为NFS文件系统的目录。根据此配置文件中的说法,不应该在目录明最后加斜杠,如果把这个路径指向一个非本地磁盘,则必须指定LockFile在本地磁盘上。如果要然多个httpd共享此目录,则必须指定LockFile和PidFile:

LockFile /var/run/httpd.lock
  LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。

PidFile /var/run/httpd.pid
  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最 初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。
此外,这个部分还包括以下详细性能配置:
  • Timeout 120 //120秒后断开连接
  • KeepAlive on //支持HTTP1.1中的一次连接传递多个HTTP请求的功能
  • MaxKeepAliveRequests 30 //设置一次连接的最大HTTP请求次数,0表示无限
  • KeepAliveTimeout 15 //服务器完成请求之后如果在这个时间内未获得请求就断开连接
  • MinSpareServers 5 MaxSpareServers 10 //最少/最大空余子进程数量,空余子进程创建随时等候请求的空闲子进程以便提升响应请求的能力
  • StartServers 5 //设置apache启动时启动的子进程数量因此应介于上述两者之间
  • MaxClients 150 //设置服务器支持的最大并发访问的客户数,因此这个参数应该大于MaxSpareServers
  • MaxRequestsPerChild 30 //每个子进程响应服务的次数,应该让子进程在一定时候销毁,生成新的子进程来替代它,能够保证系统的稳定性。默认30,基本上可以设置在1000左右

Listen 80:
  指定服务器除了80端口外还监听其他的端口的HTTP请求,貌似一般对虚拟主机比较有用。

AddModule:
  Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减 少服务器提供的功能,就不要改动这里的设置。
  Apache默认支持很多模块,但是事实上很多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到Apache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。
  在我的Apache2.2.9中,默认模块都被放在./modules目录下。


Port 80:
  设置httpd使用的端口,因为unix下使用小于1024的端口必须要root权限,所以如果使用非root帐户启动,必须使用大于1024的端口,不过因为Apache httpd本身能够以root权限打开端口后切换的普通用户身份运行,这样减少了危险.

User nobody
Group nogroup:
  Apache在打开端口后会切换到这里设定的用户权限运行,默认使用这两个权限在系统里没有文件,因此保证了服务器和它的进程没有修改文件系统的权限。当时有时候php会访问服务器上的文件,可能会产生所谓的nobody拥有的文件,这种文件能够被其他程序同样使用nobody权限来访问,似乎有安全问题,而且也不易操作,我记得Matt Cutts前段时间就在他的blog上提到他的服务器出现了php生成的nobody拥有的文件,无法删除。因此应该自己创造一个新的用户和组来作为apache的运行用户。

ServerName:
  默认情况下不需要指定这个参数,这个是apache自动解析得到的名字。

DocumentRoot "/www/" :
  这个是外部访问服务器的根路径,如果FollowSymLinks设定允许的话。在这个目录底下的符号连接指向的文件同样能被访问到。

下面是整段一起的代码:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
  Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两
种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目
录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件
名字为.htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵 活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。
  Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行限制的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。
  由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对
根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使
得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目
录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了
允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么 Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体 指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。



Options FollowSymLinks :
  Options选项指定该目录的特性,这里FollowSymLinks允许通过符号连接访问到此目录下的文件。此外还有ExecCGI可以支持目录下执行cgi程序,Indexes允许浏览器生成此目录下文件的索引列表。

AllowOverride None :
  忽略这个目录下的访问控制文件,如果用All则相反。

Order deny,allow:
  定义处理deny和allow的顺序,deny allow是控制访问的。
  
Deny from all:
  表示拒绝所有客户机访问此目录。


DirectoryIndex index.html:
  很熟悉的东西了。。

ServerSignature Off:
  是否在错误报告中显示服务器信息。


ScriptAlias /cgi-bin/ "/www/cgibin/" 
  这里定义的路径将直接访问,而不遵从DocumentRoot。

AddType application/x-httpd-php .phtml

  指定后缀名的文件被定义为指定的MIME类型。

没有评论: