Apache配置文件详解及优化


 Apache配置文件详解及优化

ServerTokens OS

#这个项目仅仅是在告知客户端我们服务器的版本和操作系统而已,不需要改动他

#如果不在乎你的系统信息被远程用户查询到,则可以将这个项目注释掉(不建议)

ServerRoot  "/etc/httpd"

#服务器设置的最顶层目录,有点类似于chroot那种感觉。包括logs , modules等

#的数据都应该要放置在此目录下面(如果这些配置没有声明成绝对路径的话)

PidFile run/httpd.pid

#放置PID的文件,可方便apache软件的管理。只有相对路径考虑ServerRoot设置值,

#所以文件在/etc/httpd/run/httpd.pid

Timeout 60

#不论接收或发送,当持续连接等待超过60秒则该次连接就中断

#一般来说,此数值在300秒左右即可,不需要修改这个原始值

KeepAlive Off

#这里最好把默认值“Off”修改为“On”

#这里表示是否允许持续性的连接,也就是一个TCP连接可以具有多个文件资料传送的要求

#举例来说,如果你的网页内含有很多图片文件,那么这一次连接就会将所有的数据传送完

#而不必每一个图片都需要进行一次TCP连接。

MaxKeepAliveRequests 100

#可以将默认的100改成500或更高

#与上一个设置的值KeepAlive有关,当KeepAlive的值设置为On的时候,这个数值可以决定

#该次连接能够传输的最大传输数量。为了提高效率则可以改大一点。0代表不限制

KeepAliveTimeout 65

#在KeepAlive设置为“On”的情况下,该次连接在最后一次传输后等待延迟的秒数

#当超过该秒数的时候该连接中断。保持默认值15即可,如果设置的值太高(等待时间较长)

#在较忙碌的系统上面将会有较多的Apache程序占用资源,可能有效率方面的问题。

<IfModule prefork.c>

StartServers      8                      #启动Apache的时候,唤醒几个PID来处理服务的。

#Apache使用了进程预派生的技术来处理请求,大大提高了响应速度,

MinSpareServers   5                          #最小预备使用的PID数量

MaxSpareServers   20                       #最大预备使用的PID数量

ServerLimit      4096                       #服务器的限制

MaxClients      4096                        #最多可以有多少个客户端同时连接到Apache

#最大的同时连接数量,也就是process不会超过这一数值。

#这个MaxClients设置值可以控制同时连上www服务器的总连接要求数量,

#也可以将其看作是最高实时在线人数。不过要注意的是:这个值并非越大越好

#因为他会消耗物理内存(与process有关),所以如果你设置太高导致超出物理内存

#能够容许的范围,那么效率就会大大降低(因为会跑SWAP),此外,MaxClients也在

#Apache编译的时候就指定最大值了,所以你也无法超出系统最大值,除非你重新编译Apache

MaxRequestsPerChild  4000

#每个程序能够提供的最大传输次数要求。举例来说:如果有个用户连上服务器之后,

#要求数百个网页,当他的要求数量超过这个值的时候则该程序会被丢弃,

#另外切换一个新程序。这个设置可以有效地管理每个process在系统上存活的时间。

#根据观察所得,新程序的效果较好。

</IfModule>

<IfModule worker.c>

StartServers        8

MaxClients         4000

MinSpareThreads     25

MaxSpareThreads     75

ThreadsPerChild     75

MaxRequestsPerChild  0

</IfModule>

#上面的prefork和worker其实就是两个与服务器连接资源有关的设置项目。

#默认的项目配置对于一般中小型网站来说已经很够用了,不过如果网站的流量

#比较大,也可以修订一下里面的数值。这两个模块都是用在提供用户连接资源,

#设置的数值越大代表系统会启动越多的程序来提供Apache的服务,反映速度就比较快

 

#Redhat和CentOS将这两个模块分别放到了不同的执行文件中,分别是

#     |- /usr/sbin/httpd  使用prefork模块

#     |- /usr/sbin/httpd.worker  使用worker模块

#/etc/sysconfig/httpd这个文件决定了Apache使用哪一个模块,可以通过。

#修改这个文件来切换不同的工作模式。

prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。

LoadModule cgi_module modules/mod_cgi.so

LoadModule version_module modules/mod_version.so

#Apache提供了非常多的模块供我们使用,以上就是加载的模块

Include conf.d/*.conf

ServerAdmin root@localhost

#系统管理员的邮箱,当网站出现问题的时候,错误信息会显示的联系邮箱

DocumentRoot   "/var/www/html"

#上面这一行的配置指定了放置首页的目录

<Directory />

    Options FollowSymLinks

    AllowOverride None

</Directory>

#Directory指定后面的路径是系统中的绝对路径

#这个设置是针对www服务器的默认环境而来的,因为是针对“/”的设置

#建议保留上面的默认值

<Directory "/var/www/html">

#使用Directory指定了一个绝对路径的目录

Options -Indexes FollowSymLinks

#Options(目录参数)

#此设置值表示在这个目录内能够让Apache进行的操作,也就是针对Apache的程序的权限设置。

#主要的参数值有:

#     Indexes:如果在此目录下找不到首页文件(默认为index.html)时,

#     就显示整个目录下的文件名,至于首页文件名则与DirectoryIndex设置的值有关

#     建议注释掉Indexes

#     FollowSymLinks:这是Fllow Symolic Links的缩写,字面意义是让连接文件可以生效。

#     我们知道首页的目录是在/var/www/html,既然是WWW的根目录,理论上就像被chroot

#     一般。一般说来说被chroot的程序无法离开其目录,也就是说,默认的情况下,你在

#     /var/www/html下面的连接文件只要链接到非此目录的其他地方,则该连接文件默认是失效的。

#     但是使用这个设置可以让链接有效的离开本目录

#     ExecCGI:让此目录具有执行CGI的权限,非常重要。举例来说,OpenWebMail使用了

#     很多Perl程序,你要让OpenWebMail可以执行,就需要在该程序所在目录拥有ExecCGI

#     的权限才行。但是要注意:不要让所有的目录均可以使用ExecCGI

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

#     MultiViews:这个有点像是多国语言的支持,与语言数据有关。在错误信息的回报内容中

#     最常见,在同一台主机中,可以依据客户端的语言而给予不同的语言显示。默认在回报

#     信息中存在,你可以检查一下/var/www/error/目录下的数据。

AllowOverride None

#允许覆盖参数功能

#表示是否允许额外配置文件.htaccess的某些参数覆盖。我们可以在httpd.conf内设置好所有的权限

#不过这样一来,若用户自己的个人网页想要修改权限时将会对管理员造成困扰。因此,Apache默认

#可以让用户以目录下的.htaccess文件内覆盖<Direcoty>内的某些功能参数。这个项目则是在规定

#.htaccess可以覆盖的权限类型有哪些。常见的有以下几种:

#     ALL:全部的权限均可以覆盖

#     AuthConfig:仅有网页认证(帐号与密码)可以覆盖

#     Indexes:仅允许Indexes方面的覆盖

#     Limits:允许用户利用Allow、Deny与Order管理可浏览的权限

#     None:不可覆盖,也就是让.htaccess文件失效

#使用.htaccess会严重影响到Apache的性能,如果不是特殊需要,建议关闭

#

# Controls who can get stuff from this server.

#

    Order allow,deny

    Allow from all

#能否登陆浏览的权限

#决定此目录是否可被Apache的PID所浏览的权限设置。

#能否被浏览主要有两种判断的方式:

#     deny,allow  以deny优先处理,但没有写入规则的默认为allow (可以理解拒绝所有,允许特定)

#     allow,deny  以allow为优先处理,但是没有写入规则的默认为deny  (可以理解允许所有,拒绝特定)

#所以在默认的情况下,因为是allow,deny 所以默认为deny(不可浏览)

#不过在下一行有个allow from all,allow优先处理,因此全部客户端均可浏览

#举个例子来说,我们要允许所有人访问除了192.168.61.61
#Order allow,deny
#allow from all
#deny 192.168.61.61
#以上这个例子很明显是允许所有拒绝特定的配置
#第二行定义了允许的规则,开放所有
#第三行定义了拒绝的规则,拒绝了一个IP,这个IP包含在第二行的all当中,
#所以它的权限就默认由最后一行配置决定,最后一行是deny,所以61.61被成功被拒之门外


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM