8.3Apache服务器8.3.1Apache概述Apache是Internet上最流行的Web服务器软件,它安全、高效、稳定、适用于各种平台,关键它还是免费的和开发源代码的。从1995年开始直到今天,经过不断的发展,Apache小组开发的ApacheHTTPd服务器软件已经成为市场的领导者。在所有的Web服务器软件中,Apache占有绝对优势,远远领先于Microsoft的IIS服务器软件。许多世界知名的网站都是基于Linux操作系统的,如yahoo、Hotmail等网站。在Linux系统上架设Web服务器所使用的最多最广泛的软件就是Apache。它功能强大,高度稳定,与Linux配合得十分完美,是在Linux上构建Web站点时首选的方案。另外,也有Windows平台下的Apache软件。可以到官方网站最新的版本。8.3.2Apache服务器的安装在安装RedHatLinux9时,可以选择安装Apache服务器,而在RedHatLinux9中内置的Apache服务器版本为httpd-2.0.40-21,如果不知道是否已安装此版本的软件,可以使用下面的方法来判断。[root@rh9root]#rpm-qahttpdhttpd-2.0.40-21.i386.rpm如果看到上面的结果,则表示该软件已经安装。否则,需要找出第二张安装光盘,保存在RedHat/RPMS目录的httpd-2.0.40-21.i386.rpm。可以使用下面的命令进行安装。[root@rh9root]#mount/mnt/cdrom[root@rh9root]#cd/mnt/cdrom/RedHat/RPMS[root@rh9root]#rpm-ivhhttpd-2.0.40-21.i386.rpm另外,为了使用图形化的Apache服务器管理工具,建议用户也安装redhat-config-httpd-1.0.1-18.i386.rpm软件包。8.3.3Apache服务器的基本配置Apache的配置文件是包含了若干指令的纯文本文件,其文件名为httpd.conf,在Apache启动时,会自动读取配置文件中的内容,并根据配置指令影响Apache服务器的运行。配置文件改变后,只有在下次启动或重新启动后才会生效。配置文件中的内容分为注释行和服务器配置命令行。行首有“#”的即为注释行,注释不能出现在指令的后边,除了注释行和空行外,服务器会认为其他的行都是配置命令行。配置文件中的指令不区分大小写,但指令的参数通常是对大小写敏感的。对于较长的配置命令,行末可使用反斜杠“\”换行,但反斜杠与下一行之间不能有任何其他字符(包括空白)。可以使用apachectl或者httpd的命令行参数-t来检查配置文件中的错误,而无需启动Apache服务器。[root@rh9root]#httpd-thttpd:Couldnotdeterminetheserver'sfullyqualifieddomainname,using127.0.0.1forServerNameSyntaxOK[root@rh9root]#apachectl-thttpd:Couldnotdeterminetheserver'sfullyqualifieddomainname,using127.0.0.1forServerNameSyntaxOK整个配置文件总体上划分为3部分(section),第1部分为全局环境设置;第2部分是服务器的主要配置;第3部分用于设置和创建虚拟主机。下面介绍一些常用的配置命令。1.常规配置指令1)ServerRoot所谓ServerRoot是指整个Apache目录结构的最上层,在此目录下可包含服务器的配置、错误和日志等文件。如果安装时使用rpm版本的方式,则默认目录是/etc/httpd,一般不需要修改。注意,这里不能在目录路径的后面加上斜线(/)。2)ServerName设置服务器用于辨识自己的主机名和端口号,该设置仅用于重定向和虚拟主机的识别。命令用法为:“ServerName完全合格的域名[:端口号]”。对于InternetWeb服务器,应保证该名称是DNS服务器中的有效记录。默认配置文件中对此没有设置,应根据服务器的实际情况进行设置。比如当前Web服务器的域名为,则可设置为:ServerName。当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来获得主机名。如果在服务器名中没有指定端口号,服务器会使用接受请求的端口。为了加强可靠性和可预测性,应使用ServerName显式地指定一个主机名和端口号。3)ListenListen命令告诉服务器接受来自指定端口或者指定地址的某端口的请求。如果Listen仅指定了端口,则服务器会监听本机的所有地址;如果指定了地址和端口,则服务器只监听来自该地址和端口的请求。利用多个Listen指令,可以指定要监听的多个地址和端口,比如在使用虚拟主机时,对不同的IP、主机名和端口需要作出不同的响应,此时就必须明确指出要监听的地址和端口。其命令用法为:“Listen[IP地址]:端口号”。Web服务器使用标准的80号端口,若要对当前主机的80端口进行侦听,则配置命令为:Listen80,假设当前服务器绑定了61.186.160.104和61.186.160.105IP地址,现需要对其80端口和8080端口进行监听,则配置命令是:Listen61.186.160.104:80Listen61.186.160.104:8080Listen61.186.160.105:80Listen61.186.160.105:80804)ServerAdmin用于设置Web站点管理员的E-mail地址。当服务器产生错误时(如指定的网页找不到),服务器返回给客户端的错误信息中将包含该邮件地址,以告诉用户该向谁报告错误。其命令用法为:“ServerAdminE-mail地址”。5)DocumentRoot用于设置Web服务器的站点根目录,其命令用法为:“DocumentRoot目录路径名”,默认设置为:DocumentRoot/var/,注意,目录路径名的最后不能加“/”,否则将会发生错误。6)ErrorDocument用于定义当遇到错误时,服务器将给客户端什么样的回应,通常是显示预设置的一个错误页面。其命令用法为:“ErrorDocument错误号所要显示的网页”。在默认的配置文件中,预定义了一些对不同错误的响应信息,但都注释掉了,只需去掉前面的“#”号即可开启。7)DirectoryIndex用于设置站点主页文件的搜索顺序,各文件间用空格分隔。例如,要将主页文件的搜索顺序设置为index.php、index.html、index.htm、default.htm,则配置命令为:“DirectoryIndexindex.phpindex.htmlindex.htmdefault.htm”。8)User和GroupUser用于设置服务器以哪种用户身份来响应客户端的请求。Group用于设置将由哪一组来响应用户的请求。User和Group是Apache安全的保证,千万不要把User和Group设置为root。9)AddDefaultCharset用于指定默认的字符集。在HTTP的回应信息中,若在HTTP头中未包含任何关于内容字符集类型的参数时,此指令将指定的字符集添加到HTTP头中,此时将覆盖网页文件中通过META标记符所指定的字符集。命令用法为:“AddDefaultCharset字符集名称”。Apache默认的字符集为ISO-8859-1,对于含有中文字符的网页,若网页中没有指定字符集,则在显示中文的时候会出现乱码,解决的办法就是将默认字符集设置为GB2312,其配置命令为:“AddDefaultCharsetGB2312”。2.性能配置指令一般情况下,每个HTTP请求和响应都使用一个单独的TCP连接,服务器每次接受一个请求时,都会打开一个TCP连接并在请求结束后关闭该连接。若能对多个处理重复使用同一个连接,则可减小打开TCP连接和关闭TCP连接的负担,从而提高服务器的性能。1)Timeout用于设置连接请求超时的时间,单位为秒。默认设置值为300,超过该时间,连接将断开。若网速较慢,可适当调大该值。2)KeepAlive用于启用持续的连接或者禁用持续的连接。其命令用法:“KeepAliveon|off”,配置文件中的默认设置为KeepAliveon。3)MaxKeepAliveRequests用于设置在一个持续连接期间允许的最大HTTP请求数目。若设置为0,则没有限制;默认设置为100,可以适当加大该值,以提高服务器的性能。4)KeepAliveTimeout用于设置在关闭TCP连接之前,等待后续请求的秒数。一旦接受请求建立了TCP连接,就开始计时,若超出该设定值还没有接收到后续的请求,则该TCP连接将被断开。默认设置为10秒。5)控制Apache进程对于使用prefork多道处理模块的Apache服务器,对进程的控制,可在prefork.c模块中进行设置或修改。配置文件的默认设置为:IfModuleprefork.cStartServers8MinSpareServers5MaxSpareServers20MaxClients150MaxRequestsPerChild1000/IfModule在配置文件中,属于特定模块的指令要用IfModule指令包含起来,使之有条件地生效。IfModuleprefork.c表示如果prefork.c模块存在,则在IfModuleprefork.c与/IfModule之间的配置指令将被执行,否则不会被执行。下面分别介绍各配置项的功能。①Startservers用于设置服务器启动时启动的子进程的个数。②MinSPareservers用于设置服务器中空闲子进程(即没有HTTP处理请求的子进程)数目的下限。若空闲子进程数目小于该设置值,父进程就会以极快的速度生成子进程。③MaxSPareservers用于设置服务器中空闲子进程数目的上限。若空闲子进程超过该设置值,则父进程就会停止多余的子进程。一般只有在站点非常繁忙的情况下,才有必要调大该设置值。④Maxclient用于设置服务器允许连接的最大客户数,默认值为150,该值也限制了httpd子进程的最大数目,可根据需要进行更改,比如更改为500。⑤MaxRequestsPerChild用于设置子进程所能处理请求的数目上限。当到达上限后,该子进程就会停止。若设置为0,则不受限制,子进程将一直工作下去。3.日志配置指令日志对于Web站点必不可少,它记录着服务器处理的所有请求、运行状态和一些错误或警告等信息。要了解服务器上发生了什么,就必须检查日志文件,虽然日志文件只记录已经发生的事件,但是它会让管理员知道服务器遭受的攻击,并有助于判断当前系统是否提供了足够的安全保护等级。l)ErrorLog用于指定服务器存放错误日志文件的位置和文件名,默认设置为:“ErrorLoglogs/error_log”。此处的相对路径是相对于ServerRoot目录的路径。在error_log日志文件中,记录了Apache守护进程httpd发出的诊断信息和服务器在处理请求时所产生的出错信息。在Apache服务器出现故障时,可以查看该文件以了解出错的原因。2)LogLevel用于设置记录在错误日志中的信息的数量,其中可能出现的记录等级依照重要性降序排列分别是:debug、info、notice、warn、error、crit、alert和emerg系。当指定了某个特定级别后,所有级别高于它的信息也将被记录在日志文件中。配置文件中的默认配置级别为warn,可根据需要进行调整。级别设置过低,将会