在开始设置Apache之前,您要知道由于主机名称对于WWW是很有意义的,所以虽然利用IP也能架设WWW服务器,不过建议您还是申请一个合法的主机名称比较好。如果是暂时测试用的主机,所以没有主机名称,那么至少在您的/etc/hosts内需要有以下这样一行:

[root@linux ~]# vi /etc/hosts
127.0.0.1   localhost.localdomain localhost

这样在启动您的Apache时才不会发生找不到完整主机名称(FQDN)的错误信息。此外,Apache只是个服务器平台而已,您还需要了解HTML以及相关的网页设计语法,这样才能丰富您的网站。对于想要设计网页的朋友来说,应用软件或许很好入门,不过想要完整地了解网站设计的技巧,还是需要研究一下基础的HTML或CSS比较妥当。中国台湾地区有个不错的网站介绍给您:网站建置百宝箱(http://dob.tnc.edu.tw/)。

您可以在里面发现不少的网页制作范例,包括一些特殊的功能。如果您真的对一些基础语法有兴趣,并且也想要开发一些所谓的“无障碍网页空间”的话,那么可以访问一下http://www.W3C.org/所列举的标准语法,相信会有所收获。

终于要来谈一谈如何设置Apache的httpd.conf配置文件。再次强调,每个distribution的此文件的内容都不尽相同,所以您必须自行找出相关的配置文件才行。那么这个httpd.conf如何设置呢?它的基本设置是这样的:

<设置项目>
此设置项目内的相关参数


例如,您想要针对首页/var/www/html/提供一些额外的功能,那么可进行如下设置:


Options Indexes


几乎都是这样的设置方式。但如果您有额外的设置时,不能随便在httpd.conf里找个地方写入,否则如果刚好写在“…”里面,就会发生错误。下面先来聊一聊Apache主机的基础设置。

事实上在Apache的网页中提供了很多详细的文件资料,鸟哥在下面仅介绍一些惯用的设置项目的意义。有兴趣的话,请前往查阅Apache 2.0核心文件:http://httpd. apache.org/docs/2.0/mod/core.html

1. 针对主机环境的设置项目

Apache针对主机的设置项目,包括响应给客户端的主机版本、主机名称、主机设置文件顶层目录等。下面就来谈一谈:

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
ServerTokens OS
# 这个项目在告诉客户端 WWW 服务器的版本与操作系统,不需要更改它
# 如果您不想告诉太多主机的信息,将这个项目的OS改成Minor

ServerRoot "/etc/httpd"
# 这个是设置文件的最顶层目录,通常使用绝对路径。下面某些数据设置使用相对路径时
# 就是与这个设置值有关的下层目录。不需要更改它

PidFile run/httpd.pid
# 放置PID的文件,可方便Apache软件的管理。只有相对路径
# 考虑ServerRoot设置值,所以文件在/etc/httpd/run/httpd.pid

Timeout 120
# 持续联机阶段如果等待超过120秒则中断该次联机
# 一般来说,此数值在300秒左右即可,不需要修改这个原始值

KeepAlive On    <==最好将默认的Off改为On
# 是否允许持续性的联机,即一个TCP联机可以具有多个文件资料传送的要求
# 例如,您的网页内含有很多图片,那么这一次联机就会将所有的数据传送完
# 而不必对每个图片都进行一次TCP联机。将默认的Off改为On较佳
MaxKeepAliveRequests 500  <==可以将原本的100改为500或更高
# 与上个设置值KeepAlive有关,当KeepAlive设置为On时,则这个数值可决定
# 该次联机能够传输的最大传输数量。为了增进效率则可以改大一点。0代表不限制

KeepAliveTimeout 15
# 在允许KeepAlive的条件下,则该次联机在最后一次传输后等待延迟的秒数
# 当超过上述秒数则该联机将中断。设置15差不多。如果设置太高 (等待时间较长)
# 在较忙碌的系统上将会有较多的Apache程序占用资源,可能有效率方面的困扰


StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000


StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0

# 上面这一串其实是两个与服务器联机资源有关的设置项目。默认的项目对于一般
# 小型网站来说已经很够用了,不过如果您的流量比较大,或许可以修订一下
# 这两个模块都提供用户联机的资源 (process),设置的数量越大
# 代表系统会启动越多的程序来提供Apache的服务,反应速度就越快
# 1. 针对模块来说
#    worker模块占用的内存较小,对于流量较大的网站来说,是一个比较好的选择
#    profork虽然占用较大的内存,不过速度与worker差异不大,并且prefork
#    内存使用设计较为优秀,可以在很多无法提供debug的平台上进行自我除错
# 2. 细节设置的内容方面(以prefork为例,与worker意义相同)
#    StartServers代表启动Apache时同时启动的process数量
#    MinSpareServers、MaxSareServers代表最大与最小的备用程序数量
#    MaxClients最大的同时联机数量,也就是process数量不会超过此数量
#    假设有10个人连上来,则Apache的程序数应有15~30个
#    MaxRequestsPerChild 每个程序能够提供的最大传输次数要求
#    例如有个用户连上服务器后(一个process),却要求数百个网页
#    当它的要求数量超过此数值,则该程序会被丢弃,另外切换一个新程序
#    这个设置可以有效地控管每个process在系统上的“存活时间”

# 除非您的网站流量特别大,否则上面的默认值已经够您使用的了。而如果您的内存
# 不够大的话,那么 MaxClients 反而要调小一点,例如150 ,否则效率不佳

Listen 80
# 与监听接口有关,默认开放在所有的网络接口上,也可修改端口,如8080

LoadModule access_module modules/mod_access.so
…
# 加载模块的设置项目,Apache提供很多有用的模块给我们使用

Include conf.d/*.conf
# 放置到/etc/httpd/conf.d/*.conf的设置都会被读入

User apache
Group apache
# 前面提到的prework、worker等模块启动的process的拥有者与群组设置
# 这个设置很重要,因为以后您提供的网页文件能不能被浏览都与这个身份有关

ServerAdmin [email protected]  <==改成您自己的 E-mail 吧
# 系统管理员的E-mail,当网站出现问题时,错误信息显示的联络信箱

ServerName linux.vbird.tsai    <==自行设置好主机名称
# 设置主机名称,如果没有指定的话,默认会以您的Host Name为依据
# 填入主机名称要找的到IP(DNS或/etc/hosts)

UseCanonicalName Off
# 是否使用标准主机名称?如果您的主机有多个主机名称,若设置为 On
# 那么Apache只接收上面 Server Name指定的主机名称联机。建议使用Off


基本设置项目比较有趣的地方在于系统的效率议题。初次接触的朋友可能会觉得很好奇:怎么两个多执行模块(worker与prefork)都有一个MaxClients的设置,那么MaxKeepAliveRequests又是什么?您可以这么想:

· MaxClients控制可以“同时连上WWW服务器的总联机要求”数量,即想成最高实时在线人数。

· MaxKeepAliveRequests则是每个Client的该次联机中,可以要求的最高传输数据量。

需要注意的是,不是MaxClients的数量越高越好,因为它会消耗物理内存,所以如果您设置太高,导致超出物理内存能够容许的范围,那么效率反而会降低(因为系统会使用速度较慢的swap),此外,MaxClients也在Apache编译时就指定最大值了,所以您也无法超出系统最大值,除非您重新编译Apache。

那么Apache到底使用哪个模块呢?是prefork还是worker?事实上CentOS将这两个模块分别放到不同的执行文件中。

•/usr/sbin/httpd:使用prefork模块。
•/usr/sbin/httpd.worker:使用worker模块。

那如何决定使用的是哪一个程序呢?您可以去查阅一下/etc/sysconfig/httpd,就能够知道系统默认提供prefork模块,但您可以通过修改/etc/sysconfig/httpd来使用worker模块。

2. 针对中文Big5编码语言

目前的因特网传输的数据编码大多数都是万国码(UTF-8),不过在中国台湾地区还是有相当多的网站使用的是Big5的繁体中文编码。如果您的Apache默认是以UTF-8编码来传输数据,但您WWW的数据却是Big5,那么客户端将会看到“乱码”。虽然可以通过调整浏览器的编码来让数据正确显示,不过总是觉得很讨厌。此时,可调整下面的两个参数。

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
# 先确定有下面这几行,理论上,应该都会有这几行
AddLanguage zh-TW .zh-tw
AddCharset  Big5        .Big5       .big5

# 找到下面这一行,应该是在730行左右
AddDefaultCharset UTF-8
# 您有两种做法,一种是“直接指定由WWW宣告Big5编码,而不用网页表头的宣告”
AddDefaultCharset Big5
# 另一种则是不要宣告默认语言,由网页表头宣告。直接批注起来即可
# AddDefaultCharset Big5

# 找到下面这一行(大约在711行),这一行在设置显示语言的优先级
LanguagePriority en ca … sv zh-CN zh-TW
# 在语言处理的优先级中,将中文设置为优先级最高
LanguagePriority zh-TW en ca…sv zh-CN

 

需要注意的是,如果您已经在客户端浏览器上浏览过非Big5的网页,那么您修改过这个设置值后,仍然要将浏览器的Cache清除才行。否则仍然会看到乱码。这不是Apache的问题,而是客户端浏览器的Cache所产生的。

另外,有没有“AddDefaultCharset Big5”这个设置值的存在会相差很多。如果指定这个设置项目后,代表“由WWW发送到客户端的网页默认将都以Big5编码为主”,所以如果您在/var/www/html/内的网页数据有Big5、UTF-8等不同编码的话,那么使用UTF-8编码的网页将会在浏览器上显示乱码。最好的做法是将该设置值设置成批注,然后在您的网页上面写入:





这样一来网页就会向浏览器说明编码的格式,即可正确显示出中文了。

3. 首页权限相关设置(DocumentRoot与Directory)

前文曾提到,CentOS的Apache默认首页放置在/var/www/html里,这是为什么呢?因为DocumentRoot这个设置值的关系。此外,由于Apache允许Internet对我们的数据进行浏览,所以您需要针对可被浏览的目录进行权限的相关设置,即通过设置值可规范目录的权限,先来看看默认的主网页设置吧。

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"  <==可以改成您放置首页的目录
# 这个设置值非常重要,因为它规范了WWW服务器主网页所放置的“目录”所在
# 这个设置值可以随意更改,不过更改之后您需要针对该目录进行权限设置
# 通过Directory可以规范目录的权限


    Options FollowSymLinks
    AllowOverride None

# 这个设置值是针对WWW服务器的“默认环境”的,因为是针对“/”的设置
# 可以设置得严格一点,保留上述的默认设置即可 (已经很严格了)


    Options Indexes FollowSymLinks  <==建议删除Indexes比较妥当
    AllowOverride None
    Order allow,deny
    Allow from all

这个地方是针对/var/www/html这个目录进行权限设置,即首页所在目录的权限,主要的几个设置项目的说明如下。

(1)Options

表示这个目录内能够进行的操作,即权限设置。主要的设置值包括如下几个。

· Indexes:如果在此目录下找不到“首页文件”,就显示整个目录下的文件名称,“首页文件”与DirectoryIndex设置值有关。

· FollowSymLinks:让在此目录下的连接文件可以连接出此目录外。一般来说被chroot的程序将无法离开其目录,也就是说默认的情况下,您在/var/www/html下面的连接文件只要连接到非此目录的其他地方,则该连接文件默认是失效的。但使用此设置即可让连接文件有效地离开本目录。

· ExecCGI:让此目录具有执行CGI程序的权限,例如,目前常见的OpenWebMail使用了很多的perl程序,要让openwebMail可以执行,就需要openwebMail程序所在目录拥有ExecCGI的权限。注意,不要让所有目录均可使用ExecCGI。

· Includes:让一些Server-Side Include程序可以运行。建议可以加上去。

· MultiViews:此参数类似于多国语言的支持,与语言资料(LanguagePriority)有关。常用于错误信息的回报,在同一台主机中,可以依据客户端的语言而给予不同的语言显示。您可以检查一下/var/www/error/ 目录下的数据。

(2)AllowOverride

表示是否允许额外配置文件“.htaccess”的权限复写?可以在httpd.conf内设置好所有的权限,如此一来若用户自己的个人网页想要修改权限时将会对管理员造成困扰。因此Apache默认可以让用户以目录下面的“.htaccess”文件复写内的权限设置。这个项目则规定“.htaccess”可以复写的权限类型有哪些。常见的有以下几种。

· ALL:全部的权限均可被复写。
· AuthConfig:仅有网页认证(账号密码)可复写。
· Indexes:仅允许Indexes方面的复写。
· Limits:允许用户利用Allow、Deny与Order管理可浏览的权限。
· None:不可复写,即“.htaccess”文件失效。

这部分内容在进阶设置时会再讲到,这里不再详述。

(3)Order

决定是否可被浏览的权限设置。主要有以下两种方式。

· deny、allow:以deny优先处理,但没有写入规则的则默认为allow。
· allow、deny:以allow优先处理,但没有写入规则的则默认为deny。

所以在默认的环境中,因为是allow、deny所以默认为deny(不可浏览),不过在下一行有个Allow from all,allow优先处理,因此全部(all)客户端皆可浏览。这部分内容在进阶安全设置中会再讲到,这里不再详述。

除了以上这些数据外,您还要知道如下这些知识:

[root@linux ~]# vi /etc/httpd/conf/httpd.conf
DirectoryIndex index.html index.html.var  <==可能需要修改的项目
# 如果客户端在地址栏中只输入到目录,例如 http://localhost/,那么 Apache
# 将显示哪个文件?这个文件也被称为默认的首页。一般来说是以index.* 为文件名开头
# 但Windows则以default.asp之类的文件名为开头的
# 如果您想要让类似index.pl或index.cgi也可以是首页,那可以改成如下形式
# DirectoryIndex index.html index.htm index.cgi index.php3 …
# 其与刚刚谈到的Options里的Indexes有关

Alias /icons/ "/var/www/icons/"

    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all

# 这个Alias很有趣,用于制作类似连接文件
# 当输入http://localhost/icons时,其实/var/www/html并没有icons的目录
# 不过由于Alias的关系,会让该网址直接连接到/var/www/icons/下
# 这里默认有很多Apache提供的小图标。因为设置了一个新的可浏览目录
# 所以多了一个来规范权限 

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

    AllowOverride None
    Options None
    Order allow,deny
    Allow from all

# 与上面的icons类似,不过这边是以ScriptAlias为设置值
# 这个设置值可以指定该目录下面为“具有ExecCGI”能力的目录所在
# 所以可以将类似Open webMail的程序放置到/var/www/cgi-bin内
# 就不必额外设置其他的目录来放置您的CGI程序

接下来看看还有哪些额外的配置文件需要处理。