一、常规设置
1、serverRoot "/etc/httpd" //服务器配置文件及日志文件位置
2、pidfile run/httpd.pid //用来指定http.pid的位置。此文件记录httpd进程的ID,即进程号。httpd能自动复制其自身。因此系统中有多个httpd进程。但只有一个是初始末进程。即父进程。此处指定的文件就是记录http的父进程号。
3、timeout 120 //指定客户端与服务器连接超时的时间间隔。超过这个时间服务器没响应,就断开连接。
4、keep alive off //当参数为ON时,即可以一次连接可以多次请求.但off时,一次连接只能一次请求。在http1.0中,一次连接只能作一次http请求。http1.1以上后,可以一次连接多次传输。即一次连接可以传递多个http请求。打开可以提高性能。建议没为on.
5、maxkeepalive requests 100 //每一次连接可提出的请求数。设为0时,为不限制
6、keepalive timeout 15 //一次连接多次请求之间的间隔时间。如果一次连接后,在完成一次请求后,在这个间隔时间之内,没有收到下一个请求就中断连接。以秒为单位。即两次请求的最大时间间隔。超过就中断连接。
二、服务器连接控制:
1、prefork模块,这个模块只是多进程的设置
<IFModule prefork.c>
min spareserver 5
max spareservers 20 //在使用子进程处理http请求的web服务器上,要先生成子进程才能处理客户端的请求,因此反应会有一点延迟。但是apache服务器预先生成多个空余的子进程驻留在系统中,一旦出现请求就用这些空余的进程进行处理,就可以摆脱这种生成子进程造成的延迟现象。
但随着请求越来越多,子进程会越开越多,并且完成请求后,打开了的子进程就不会自动退出,等待下个请求。但是这样子进程只增加不减少,占用服务器资源。所以设置一个空闲子进程上限。当空闲子进程超过上限数时,会自动关掉一些空闲子进程, 降到最大子进程数之下。
min spareservers 是设定空闲子进程不得少于这个数。 max spareservers 是指最大子进程数,超过的就关掉。
startserver //用来设置http启动时启动的子进程副本数量。这个参数应设为上面的 min 和max 之间的一个数。不然就没有意义了。
serverlimit // 默认最大连接只有256,所以为了加大客户并发连接数,就需要此处定义。最大为20000
maxclients 256 //设置最大并发连接此服务器的客户数。限制同时连接此服务器的客户数目。
maxrequstperchild 1000 //每个子进程处理一定次数的请求后,就退出此子进程,重新生成一个干净的子进程。此处为一个子进程处理1000次请求后就关掉,重新生成一个干净的子进程。设为0的话,一个子进程可以无限制处理请求的次数。
</IFModule>
2、 worker模块,这个模块支持全新的多线程和多进程混合模型的MPM。编译安装时,加上configure --with-mpm=worker即可。
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Worker由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。ThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用ThreadLimit指令,它的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则Apache将会自动调节到一个相应值。
三、端口、执行用户、存放目录设定
1、listen 80 //设置服务器的监听端口,和客户端的请求的IP地址(服务器的IP地址)。 可以设置为其他端口,但建议为默认的。
2、loadmodule //为服务器启动时的动态加载模块。
3、user apache
group apache //设置httpd运行后,权限所属为此处定义的用户和组。是Apache的安全保证。默认是apache帐号和组。此选项只在standalone模式中运行。intetd模式在inetd.conf中指定运行apache的用户。一般为web服务设定一个特定的用户和组。并在这里更改用户的用户和组设置。
4、serveradmin root@localhost //指定管理员的邮件地址。当出错时,会发送邮件给这个邮件地址。
5、servername localhost //缺省不需要指定。服务器将自动通过DNS解析获得自已的名字。但有时候DNS服务器出错,没有正式的DNS名字,也可指定IP地址。此处设置即为指定服务器对外的正式名字。特别是在一个服务器有多个别名的情况下,总是返回这个正式名给外部。
6、documentroot "/var/web/www/html" //指定存放网页的根目录位置。可自行指定。
四、目录和文件的访问控制:
apache对网页文件所在目录的访问控制有有两种方法:一种是设置httpd.conf对每个主页目录及文件进行访问控制。但这种方法每次更改后都需重启HTTPD。
二是在每个网页所在目录下设置访问控制文件。通常访问文件名字为htaccess,所以一般用httpd.conf来配置服务器系统的整体安全控制策略。而使用每个目录下的htaccess文件设置具体目录的访问控制更为灵活。
1、目录的控制块
<directory "/var/web/www/html"> ...... </directory> 实现对目的访问控制。注意,目录的权限是可以继承的。此例是设定目录/var/web/www/html的访问权限。
每个目录有以下几个选项:
option:用来设置区块的功能
allow override:目录属性是否可以覆盖系统在设置文件的设置。一是上级目录的权限会自动继承下来,此处设置可另设置与上级目录不一样的权限。
二是不使用目录中htaccess文件中规定的权限,在此处另设权限。
deny
allow //这两项是设置接受或拒绝哪些客户端或地址可以访问此目录。
order //设置当allow 和deny相冲突时,以哪个为准。
option 的参数详解:
All: 用户可在此目录中做任何事情。所有目录特性都有效。
None: 不允许访问此目录。所有目录特性都无效。
FollowSymlinks: 可以使用符号连接到不在此目录中的文件或目录参数。只有符号连接的目的与符号连接本身为同一用户所拥有时才允许访问。此项在location中无效。
execcgi: 允许在此目录中执行CGI程序。
Indexes: 允许生成此目录的文件列表。在没有index.htm等索引文件时,能向浏览器发送这个目录下的列表。
Includes: 提供ssi功能。
includes noexec: 提供ssi功能,但不允许执行CGI程序中的#exec #include命令。
multiviews: 使用权用内容商议功能。服务器和浏览器相互沟通后,决定返回哪个网页给客户,即决定网页传递性质。如多语言版网页时,可以定义网页浏览器优先返给用户英文版网页内容。此功能需单独加上。
symlinks if owner mactch:当符号链接指向的文件或目录拥有者和当前用户帐户相符,则服务器会通过符号链接访问不在该 目录下的文件或目录。
allow override 参数详解:
all:缺省值。使访问控制文件可以覆盖系统配置。即以.htaccess文件的权限为准。
none:服务器忽略访问控制文件的设置。即htaccess和上级目录权限无法影响到此目录的权限,以此目录自已的权限为准。
fileinfo:允许访问控制文件中使用 add type等参数设置。即htaccess文件中可以用addtype参数。
options:允许访问控制文件中用option参数定义目录的选项
authconfig:允许控制文件使用权用authname authtype等针对每个用户的认证机制。使用权目录主能用口令和用户名来保护目录。允许对访问目录的客户机的IP地址和名字进行限制。
2、控制文件的设定
access filename .htaccess //定议第每个目录下的访问控制文件的文件名。默认是 htaccess。可以更改这个文件里的内容来改变不同目录的访问控制。
3、文件的访问控制:
以上是目录的访问控制,此处是单个文件的访问控制。
<file ~ " ^\.ht">
order allow,deny
deny from all
<files>
//不允许访问任何.ht的文件。
针对文件来设置访问控制。不管文件位于哪个目录下,只要名字匹配就要受到相应控制。
五、系统用户网页目录及关联程序设定:
1、系统帐号的网页目录设置:
<if module mod_userdir.c>
userDir disable
</if module>
这个模块内定义 userDir参数可以为:disable 和public_html两种。
当一台linux上运行apache时,这台电脑上的所有实际用户都可以有自已的网页路径。如//www.elitek.com/~khp 。使用"~用户名"可以映射到用户自已的网页目录上。映射目录为用户个人主目录下的一个子目录。名字默认为public_html。
如果apache服务器上有一个用户名叫khp。 则在用户的宿主目录下会有一个public_html的目录,用以映射目录。即/home/khp/public_html为用户的网页路径。如果apache电脑名为:www.elitek.com,则访问方式为:http://www.elitek.com/~khp,即可访问自已的网页。
如果不想为用户提供网页服务就用参数disable关闭。
2、索引文件优先顺序
DirectoryIndex index.html indx.htm indx.php index.cgi //定义每个目录中的默认的网页文件名称。排在前面的优先。当网页目录中同时拥有几个索引网页文件时,排在前面的作为索引文件。当网页目录部没有上述中的任何一个文件时,将返回主目录的目录列表给客户。(这个在前面要定义)
3、网页关联程序:
TypesConfig /etc/mine.types //设置各种文件类型关联。让网页浏览器知道该使用哪种软件来处理这些文件。把网页中包含的各种文件类型通知网页浏览器。
DefaultType text/plain //当无法识别文件类型时,则当成文本来处理。即当web服务器不能识别一个文件的类型时,就用此处定义的类型打开,此例子中定义的类型为文本类型。
<ifmodule mod_mine_magic.c>
MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic
</ifmodule>
//除了根据后缀名判断文件类型以外,还可以根据文件的内容判断文件的类型。上面是一条件语句,如果载入了这个模块,就必须指定相应的标志文件magic的位置。此模块并非默认加载。需用此功能,可以前面的全局设定中找到loadmodule模块。去掉前面的#号。重新启动服务器即会加载。
六、日志记录及报错处理:
HostnameLookups off //连接时服务器仅能记录得到客户机的IP地址。如果想同时得到记录客户的主机名,则把此项改为参数"on"。但这样逆向查询dns,会增加系统开销,反应慢。建议设为"OFF"。
Errolog logs/error_log //记录浏览器加载网页发生错误、以及关闭启动httpd信息。
logLevel warn //设置要存入erro.log文件中的消息等级。
log formet "%h
log format %....... //设置每条记录的格式。有combined common referer 和agent 4种格式。不同的日志以不同的格式记录。
customlog logs/access_log combined //访问记录的位置,使用common格式。
customlog logs/referes_log referer //referer格式记录通过本网络连接出去的网址。
server signature on //出错时,在返回的错误网页中加上server 的版本和主机名。
七、目录别名设定
1、alias /icons/ "var/www/icons/" //为某一目录建成立别名。此处为 /var/www/icon/ 目录建立了较短的别名/icons/
2、script alias /cgi-bin/ "/var/www/cgi-bin/" //为script程序的目录设置别名。此目录中的文件会被server视为可执行。scriptAlias是为URL路径的映射。script alias 是用于映射CGI程序的路径。这个路径下的文件都被定义为CGI程序。通过执行它们来得到结果,而不是服务器直接返回。
3、redirect oldurl newurl //当一个网页文档改变位置后,又希望老的链接可以访问,就用这条指定。
八、图标及显示设定
1、addiconByEncoding //定放各种文件类型的小图标
2、defaulticon /icons/unkmown .gif //指定默认图标,是指当上条中没有指定时,以此处指定的图标。
3、readmename readme.html //表示需要建立自已的readme.html文件。显示在文件尾。
headername header.html //表示需要建立自已的头文件,是示在文件头。
九、字符集及语言:
1、DefaultLanguage nl //默认语言设定。
2、addlanguage da.dk //服务器针对不同国家的客户,通过浏览器进行协商。针对不同的语言发送不同的语言版本。
3、language priority en da nl et fr //定义上面的语言的优先级。应用很少。
4、add charset ISO-8859-1 //定义字符集。
5、addEncodingX-Comperess z
addEncodingX-gzip gz tgz //指定解压缩程序。当网页文件遇到扩展名为 z tgz文件时,会自动解压缩。
十、erro及browsermatch
1、erro document //当浏览器发生错误时,会显示的错误信息,不同的错误显示不同的信息。
2、browser match 的功能,为特定的客户程序设置特定的参数。以保证对老版游览器的兼容性。并支持浏览器的新特性。
browsermatch "mozillo/z" nokeepalive //当浏览器使用这两种浏览器,将不提供keepalive功能。
browser match "realplay4.1.0 //强迫这种程序用http1.o规格的响应方式。
十一、url 访问控制:
<location /url> .....</location> //用于定义url .无须文件系统支持。
例:
<location /private> //此处定义的不是目录名,而是url中包含的名字符号。
order allow deny
deny from all
</location > //此例中表示拒绝对所有包含/private的url的访问。
如:http:www.sina.com/private123/file.htm ,将无法访问。
十二、代理服务器设置
<proxy *> ....</proxy>
是否允许通过代理服务器访问设定站点。也是用于url .
<proxy /cnn.com/*>
order allow deny
deny all
</proxy>
//拒绝通过代理服务器访问 cnn.com的站点。
十三、缓存设置
#cacheroot "/etc/httpd/proxy" //指定缓存目录。
#cachesize5 //指定缓存的大小
#cacheGcinlircal //设置检查缓存大小的时间间隔。
#cache MaxExprire 24 //设置一分文件最久可留的缓存中的时间,默认24小时。
#cacheDefault Expire //对于使用非HTTP传输协议的文件。判断保时将该文件自缓存中删除。
#no cache domain.com another domain //设置缓存之后,不是每个网页都放入缓存。可用 no cache指定哪些网页不放入缓存。
十四、虚拟主机配置
1、NameVirtualHost 192.168.1.0:80 //可指定虚拟主机的IP地址和端口号,或只指定IP地址。
<virtualHost *:80> //此处的*号,到时要改为实际的IP地址
Serveradmin
[email protected] //指定管理员信箱
DocumentRoot /www/docs/dummy-host.example.com //指定存放网页的目录
ServerName dummy-host.example.com //指定虚拟主机名
ErrorLog logs/dummy-host.example.com-error_log //指定保存错误消息的日志文件
CustomLog logs/dummy-host.example.com-access_log common //指定一般日志文件,及日志格式
</VirtualHost>