Apache服务器配置指令详解
2010-08-21 12:57:29 阿炯

apache采用了模块化的体系结构,不仅提供了基本的WEB服务,而且还具有极强的可扩展的属性。(基于redhat linux)

apache的主要属性:
1,支持http1.1标准
2.支持多种脚本语言如perl php jsp等
3.支持多种用户认证机制,如.htaccess文件,mysql数据库,openldap目录等。
4.支持虚拟主机
5.支持访问控制。
6.支持重定向和重写规则
7.支持ssl。

1.apache配置文件

(1)apache配置文件的结构
apache的配置文件分为3段:

section1:global environment
控制apache服务器进程的全局操作。

section2:main server configuration
这段的功能是处理任何不被段处理的请求,即提供默认处理,注意:section2种指令都可以卸载虚拟主机段中。

section3:virtual hosts
提供虚拟主机配置。

(2)apache配置指令
---------------
1.section1配置指令
首先介绍section1:global environment 段的配置指令及功能。
(1)SeverTokens OS
功能:显示apache的版本和操作系统的名称。
(2)SeverRoot "/etc/httpd"
功能:设置服务器的根目录。
说明:在apache配置文件种如果文件名不是以"/"开头,则认为是相对路径,会在文件名前加上SeverRoot命令制定的默认路径名。
(3)PidFile run/httpd.pid
功能:指定apache服务器进程的进程号文件存放的位置,很明显,此处文件的存放的路径应该不上SeverRoot指令的值,即/etc/httpd/run/httpd.pid
(4)Timeout 300
功能:指定超时间隔为300s。
(5)KeepAlive Off
功能:设置是否允许保持连接,若值为Off,则表示不允许保持连接,此时一次连接只能响应一次请求,而一个请求一般情况下只能传输一个文件。若值为on,则表示允许保持连接,即允许一次连接可以连续相应多个请求,这在一个页面上有多个相关文件的情况下,可以明显提高相应速度。
(6)MaxKeepAliveRequests 100
功能:设置一次保持连接最多包含的请求数。0表示无限制。
(7)KeepAliveTimeout 15
功能:设置一次保持连接的超时间隔为15s。
(8)服务器池设置
apache2.0提供了两种服务器的工作方式,一种是预派生模式prefork MPM;另一种是工作者模式worker MPM,其中worker MPM主要在UNIX环境下采用,而prefork MPM适合在LINUX环境。下面介绍预派生模式的配置及含义。

StartSevers    8
功能:apache开始运行时,立刻启动8个服务器子进程。
MinSpareSevers 5
功能:设置最小空闲服务器子进程的个数为5个。
MaxSpareSevers 20
功能:设置最大空闲服务器子进程的个数为20个。
ServerLimit    256
功能:设置apache服务器子进程的个数为256个。
MaxClients     256
功能:设置同时响应的客户数最多为256个。
MaxRequestsPerChild 4000
功能:设置每个服务器子进程最多可以服务的请求数为4000个。

(9)Listen 80
功能:设置apache服务器监听的端口号为80.
说明:也可以设置apache服务器监听的ip地址和端口号,如listen 12.34.56.78:80
(10)动态共享对象支持
#Dynamic Share Object(DSO)Support
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
LoadModule access_anon_module modules/mod_access_anon.so
LoadModule ldap_module modules/mod_ldap.so
……
LoadModule cgi_module modules/mod_cgi.so
功能:apache采用模块化的结构,各种可扩展的特定功能以模块形式存在而没有静态编进apache的内核,这些模块可以动态地载入apache服务进程中,这样做,在很大程度上方便了apache功能的丰富和完善。
(11)Include conf.d/*.conf
功能:将/etc/httpd/conf.d/中左右的.conf结尾的文件包含进来,这是apache配置文件又一灵活之处,使得apache配置文件具有很好的可拓展性。
(12)#ExtendedStatus On
功能:当访问server-status时,设置是否显示详细的扩展状态信息,默认情况下为OFF。
说明:apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus参数可以让服务器报告更全面的运行状态信息。
如:http://192.168.0.12/server-status,可以查看详细的运行状态信息
注意:该指令还需要后门的指令段相配合。
---------------
2.section2配置指令
这一段的配置是为所有虚拟主机提供了默认值。
(1)apache服务器子进程运行身份以属组
User apache
功能:apache服务器子进程运行时的身份为apache。
Group apache
功能:apache服务器子进程运行时的属组为apache。
(2)ServerAdmin root@localhost
功能:设置apache服务器管理员的邮箱
(3)#ServerName new.host.name:80
功能:设置apache默认站点的名称和端口号。
说明:这里的名称可以是ip地址,也可以是域名,如果是域名的话,还需要DNS服务器的支持。
(4)UseCanonicaiName Off
功能:设置是否使用规范名称。当值为Off时,表示使用有客户提供的主机名和端口号;当值为On时,表示使用ServerName指令设置的值。
如果有一个web服务器,其ServerName设置的值是www.abc.com
当用户输入http://www/index.html时,有一下两种情况:
如果值为Off,则相当于http://www/index.html
如果值为On,则相当于http://www.abc.com/index.html
(5)DocumentRoot "/var/www/html"
功能:设置默认web站点的文档根目录/var/www/html。这是基础设置之一,网站应该放在此目录下。
(6)根目录的访问控制

Options FollowSymLinks
AllowOverride None

功能:在main server段中有很多个Directory指令配置段,它的写法有些类似HTML的格式。表示要对文件系统的目录进行限制。
Options FollowSymLinks表示跟随符号链接,关于Option的值参见6-1下表。

AllowOverride None表示不允许覆盖,AllowOverride的值参见表6-2,在此例种队根目录做了非常严格的限制,即只允许跟随符号链接,不允许其他文件覆盖当前的设置。

(7)文档根目录的访问控制

功能:针对文档根目录"/var/www/html"进行限制。
Options Indexs FollowSymLinks
功能:设置允许跟随符号连接:Indexes的含义是如果要访问的文档不存在,则会显示出该目录下的文件目录清单。
AllowOverride None
功能:不允许覆盖当前设置,即不处理.htaccess文件。
Allow from all
功能:允许从任何地点访问该目录。

(8)开放个人主页
默认情况下,apache禁用了个人主页功能。如果要开放个人主页功能需要做如下的设置:

#UserDir disable
功能:开放个人主页功能。
UserDir public_html
功能:指明个人主页的文档根目录名称为public_html.

当访问http://www.abc.com/~s1/时,相当于访问www.abc.com站中的文件/home/s1/pubilc_html/index.html,即s1用户的个人主页。
除了上述用法之外,还有其他用法,看下面两个示例。
1.
UserDir public_html
UserDir disable user2

只禁用了user2的个人主页功能,开放其他用户的个人主页功能。
2.
UserDir public_html
UserDir disabled
UserDir enabled user2

只开放user2的个人主页功能,禁用其他用户的个人主页功能。
需要说明的是:在RHEL4.0最初的发型版中,需要关闭SELinux(它提供了灵活的强制访问控制功能,使LINUX更加安全。)才能开放个人主页功能。关闭SELinux的方法是:编辑SELinux的配置文件/etc/selinux/config,将SELinux的值设置为disabled,即SELinux=disabled。这样重启机器后,SELinux的功能就会被关闭。
(9)对每个用户的个人主页的根目录进行限制
以下配置段默认作为注释,可以将#去掉 使之生效。
#
功能:此处用到了“*”来配置任意用户,表示对每个用户的个人主页的根目录进行限制。
#   AllowOverride FileInfo AuthConfig Limit
功能:允许覆盖FileInfo,AuthConfig,Limit这三项的配置
#   Options MultiViews Indexes SymLinksIfOwenerMatch IncludesNoExec
功能:设置该目录具有如下选项属性 MultiViews,Indexes SymLinksIfOwenerMatch和IncludesNoExec
#  
功能:Limit指令仅对http的方法进行限制,本例是针对GET,POST和OPTIONS方法进行限制。
#        Order allow,deny
#        Allow from all
#  

#  
功能:除了LimitExcept指令中列出的方法外,对其他未列出的方法进行限制。
#        Order deny,allow
#        Deny from all
#  

#

说明:一般情况下,当开放个人主页功能时同时启用该配置段,去掉各配置行的“#”即可。
(10)DirectoryIndex index.html index.html.var
功能:指定每个目录的默认文档名。
说明:index.html.var是内容协商文档,一般情况下,它挑选一个与客户端的请求最符合的文档来相应客户,如语言一致。
(11)AccessFileName .htaccess
功能:指定每个目录中访问控制文件的名称为.htaccess。
(12)文件访问控制

Order allow,deny
Deny from all

功能:针对以.ht开头的文件进行访问控制,本例为禁止访问以.ht开头的文件。
“\”去掉其后面字符的特殊含义。
(13)TypeConfig /etc/mime.types
功能:指定mime.types文件的存放位置;mime.types文件中存放了mime定义的各种文件类型。
(14)DefaultType text/plain
功能:指定默认的文件类型
(15)mime_magic模块

#   MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic

(16)HostnameLookups Off
功能:HostnameLookups指令用来设置在记录日志时是记录客户机的名称还是IP地址;值为On标号四记录客户机的名称,值为Iff表示记录客户机的IP地址。为了提高速度,降低流量,一般该值设置为Off。
(17)ErrorLog logs/error_log
功能:指定错误日志的存放位置
(18)LogLevel warn
功能:指定日志记录的级别。
(19)日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\""combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Refer}i -> %U" refer
LogFormat "%{User-agent}i" agent
功能:指定日志的格式
(20)CustomLog logs/access_log combined
功能:指定访问日志的位置和类型
(21)ServerSignature On
功能:在服务器产生的页面中添加一行,该行包括服务器的版本和虚拟主机的名称。
(22)Alias /icons/ "/var/www/icons/"
功能:定义/icons/ 为“/var/www/icons”的别名,也可以认为/icons/虚拟目录对应的真是目录为“/var/www/icons/”.
说明:当用户在浏览器的地址输入http://www.unixaid.info/icons时,相当于访问该服务器下的/var/www/icons目录。一般情况下,在定义了别名后面紧跟着对该目录的访问控制配置段如下。

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

(23)WebDAV 模块配置段

#Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb

功能:指定WebDAV加锁数据库的位置。
说明:当WebDAV功能激活后,允许客户通过Web方式维护站点的内容。
(24)ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
功能:定义脚本别名,将/cgi-bin/定义为"/var/www/cgi-bin/"的别名。
说明:一般情况下,将/cgi-bin/中存放的是CGI脚本程序,而且脚本程序应该位于文档根目录之外,所以采用了别名(虚拟目录)的方式。接下来,仍然是对脚本别名所对应的真是目录做限制的配置段,内容如下:

AllowOverride None
Options None
Order allow,deny
Allow from all

(25)IndexOptions FancyIndexing VersionSort NameWideth=*
功能:设置自动生成目录列表的显示方式,其中3个值的含义如下:
FancyIndexing:对每种类型的文件前加一个小图标以示区别。
VersionSort:对同一个软件的多个版本进行排序。
NameWidth=*:文件名字段自动适应当前目录下的最长文件名,。
(26)图标显示
AddIconByEncoding (CMP/icons/compressed.gif) x-compress x-gzip
功能:用于指定服务器通过MIME编码格式来辨别文件类型并显示图标。
AddIconByType (TXT/icons/text.gif) text/*
功能:指定服务器通过定义的MIME类型来显示图标。
AddIcon /icons/binary.gif .bin .exe
...
AddIcon /icons/blank.gif ^^BLANKICON^^
功能:指定服务器通过文件的扩展名来显示图标。
(27)DefaultIcon /icons/unknown.gif
功能:定义默认图标。
(28)目录列表的附加内容
ReadmeName README.html
功能:在进行目录列表时,会将位于该目录下的README.HTML的内容追加到目录列表的末尾。
HeaderName HEADER.html
功能:在进行目录列表时,会将位于该目录下的HEADER.html的内容追加到目录列表的开头。
(29)IndexIgnore .??*~*#HEADER* README*RCS CVS*,v*,t
功能:定义那些文件名不参与索引。
(30)语言支持
AddLanguage ca .ca
...
AddLanguage zh-CN .zh-cn
功能:增加语言支持
(31)LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
功能:定义语言优先级
(32)ForceLanguagePriorityPrefer Fallback
功能:指定强制语言优先级的方法,含义如下:
Prefer:当有多种语言可以匹配时,使用LanguagePriority列表中的第一项。
Fallback:当没有语言可以匹配时,使用LanguagePriority列表中的第一项。
(33)字符集设置
AddDefaultCharset UTF-8
功能:设置默认字符集为UTF-8
AddChartset ISO-8859-1 .iso8859-1 .latin1
...
AddCharset GB2312 .gb2312 .gb
功能:增加各种常用的字符集。
(34)增加MIME文件类型
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
功能:若去掉#,则表示允许某些浏览器可以在线解压指定类型的文件。
#AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz
功能:如果AddEncoding去掉注释的话,那么应该定义这些扩展名来指明文件的类型。
(35)设置apache对某些扩展名的处理方式
AddHandler imap-file map
功能:指定图片文件的处理方式
AddHandler type-map var
功能:指定允许关于显示主页时进行内容协商,即根据不同语言来显示相应的主页
(36)关于SSI的设置
AddType text/html .shtml
功能:定义SSI文件的扩展名
AddOutputFilter INCLUDES shtml
功能:增加处理.shtml文件的方法。
(37)Alias /error/ "/var/www/error/"
功能:定义出错信息的别名目录。
# ErrorDocument 400/error/HTTP_BAD_REQUEST.html.var
# ErrorDocument 401/error/HTTP_UNAUTHORIZED.html.var
# ErrorDocument 403/error/HTTP_FORBIDDEN.html.var
...
# ErrorDocument 506/error/HTTP_VARIANT_ALSO_VARIES.html.var
功能:定义错误编号与文档的对应关系。
(38)定义浏览器匹配
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSMIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
功能:定义与浏览器匹配的类型所对应的特性
(39)定义服务器状态
#
#   SetHandler server-status
#   Order deny,allow
#   Deny from all
#   Allow from .example.com
#

功能:设置apache可以报告详细的服务器状态信息
说明:此配置段与#ExtendedStatus On相关,一般情况下两者同时起作用。