转之--http://jafy00.blog.51cto.com/2594646/508205javascript
DocumentRoot "/usr/local/apache-2.2.6/htdocs"php
#设置WEB文档根目录的默认属性css
<Directory />html
Options FollowSymLinksjava
AllowOverride Noneweb
Order deny,allowapache
Deny from all浏览器
</Directory>缓存
#设置DocumentRoot指定目录的属性安全
<Directory "/usr/local/apache-2.2.6/htdocs">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#设置默认目录资源列表文件
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
#拒绝对.ht开头文件的访问,以保护.htaccess文件
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
<IfModule log_config_module>
#定义访问日志的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#指定访问日志及使用的格式
CustomLog logs/access_log combined
</IfModule>
#设定默认CGI脚本目录及别名
ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"
#在以线程式MPM(worker)运行的Apache中设置用来与CGI守护进程通讯的套接字文件名前缀
<IfModule cgid_module>
Scriptsock logs/cgisock
</IfModule>
#设定默认CGI脚本目录的属性
<Directory "/usr/local/apache-2.2.6/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
#设定默认MIME内容类型
DefaultType text/plain
<IfModule mime_module>
##指定MIME类型映射文件
TypesConfig conf/mime.types
#增长.Z .tgz的类型映射
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
#启用内存映射
EnableMMAP on
##使用操做系统内核的sendfile支持来将文件发送到客户端
EnableSendfile on
#指定多路处理模块(MPM)配置文件并将其附加到主配置文件
Include conf/extra/httpd-mpm.conf
#指定多语言错误应答配置文件并将其附加到主配置文件
Include conf/extra/httpd-multilang-errordoc.conf
#指定目录列表配置文件并将其附加到主配置文件
#Include conf/extra/httpd-autoindex.conf
#指定语言配置文件并将其附加到主配置文件
Include conf/extra/httpd-languages.conf
#指定用户主目录配置文件并将其附加到主配置文件
#Include conf/extra/httpd-userdir.conf
#指定用于服务器信息和状态显示的配置文件并将其附加到主配置文件
#Include conf/extra/httpd-info.conf
#指定提供Apache文档访问的配置文件并将其附加到配置文件
#Include conf/extra/httpd-manual.conf
#指定DAV配置文件并将其附加到主配置文件
#Include conf/extra/httpd-dav.conf
#指定与Apache服务自身相关的配置文件并将其附加到主配置文件
Include conf/extra/httpd-default.conf
#指定mod_deflate压缩模块配置文件并将其附加到主配置文件
Include conf/extra/httpd-deflate.conf
#指定mod_expires模块配置文件并将其附加到主配置文件
Include conf/extra/httpd-expires.conf
##指定虚拟主机配置文件并将其附加到主配置文件
#Include conf/extra/httpd-vhosts.conf
#指定SSL配置文件并将其附加到主配置文件
Include conf/extra/httpd-ssl.conf
##SSL默认配置
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#配置多路处理模块(MPM) httpd-mpm.conf
首先说一下原理:
prefork模式
这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工做方式相似于Apache 1.3。它适合于没有线程安全库,须要避免线程兼容性问题的系统。它是要求将
每一个请求相互独立的状况下最好的MPM,这样若一个请求出现问题就不会影响到其余请求。
这个MPM具备很强的自我调节能力,只须要不多的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以至须要使用的内存
超出物理内存的大小。
worker模式
此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。因为使用线程来处理请求,因此能够处理海量请求,而系统资源的开销小于基于进程的MPM。可是,它也使用了多进
程,每一个进程又有多个线程,以得到基于进程的MPM的稳定性。
控制这个MPM的最重要的指令是,控制每一个子进程容许创建的线程数的ThreadsPerChild指令,和控制容许创建的总线程数的MaxClients指令
#设置prefork多路处理模块
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 8000
MaxClients 8000
MaxRequestsPerChild 0
</IfModule>
StartServers:设置服务器启动时创建的子进程数量。由于子进程数量动态的取决于负载的轻重,全部通常没有必要调整这个参数。
MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。若是当前空闲子进程数少于 MinSpareServers ,那么Apache将以最大每秒一个的
速度产生新的子进程。只有在很是繁忙机器上才须要调整这个参数。将此参数设的太大一般是一个坏主意。
MaxSpareServers:设置空闲子进程的最大数量。若是当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在很是繁忙机器上才须要调整这个参数
。将此参数设的太大一般是一个坏主意。若是你将该指令的值设置为比MinSpareServers 小,Apache将会自动将其修改为"MinSpareServers+1"。
ServerLimit:服务器容许配置的进程数上限。只有在你须要将MaxClients设置成高于默认值256的时候才须要使用。要将此指令的值保持和MaxClients同样。修改此指令的值必须
彻底中止服务后再启动才能生效,以restart方式重启动将不会生效。
MaxClients:用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,若是要提升这个值必须同时提升
ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),而后根据负载状况进行动态调整。好比一台4G内存的机器,那么初始值就是4000/2=2000。
MaxRequestsPerChild:设置每一个子进程在其生存期内容许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。若是MaxRequestsPerChild为"0",子进程
将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:能够防止(偶然的)内存泄漏无限进行而耗尽内存;
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减小活动进程的数量。
若是设置为非零值,建议设为10000-30000之间的一个值。
公式:MaxClients<=ServerLimit
#设置worker多路处理模块
<IfModule mpm_worker_module>
StartServers 5
ServerLimit 20
ThreadLimit 200
MaxClients 4000
MinSpareThreads 25
MaxSpareThreads 250
ThreadsPerChild 200
MaxRequestsPerChild 0
</IfModule>
StartServers:设置服务器启动时创建的子进程数量。由于子进程数量动态的取决于负载的轻重,全部通常没有必要调整这个参数。
ServerLimit:服务器容许配置的进程数上限。只有在你须要将MaxClients和ThreadsPerChild设置成须要超过默认值16个子进程的时候才须要使用这个指令。不要将该指令的值设
置的比MaxClients 和ThreadsPerChild须要的子进程数量高。修改此指令的值必须彻底中止服务后再启动才能生效,以restart方式重启动将不会生效。
ThreadLimit:设置每一个子进程可配置的线程数ThreadsPerChild上限,该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。修改此指令的值必须彻底中止服务后再启动
才能生效,以restart方式重启动将不会生效。
MaxClients:用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25
(ThreadsPerChild)的结果。所以要增长MaxClients的时候,你必须同时增长 ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),而后根据负载状况进行动
态调整。好比一台4G内存的机器,那么初始值就是4000/2=2000。
MinSpareThreads:最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。若是服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
MaxSpareThreads:设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。若是服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。
MaxSpareThreads的取值范围是有限制的。Apache将按照以下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。
ThreadsPerChild:每一个子进程创建的线程数。默认值是25。子进程在启动时创建这些线程后就再也不创建新的线程了。每一个子进程所拥有的全部线程的总数要足够大,以即可以处理
可能的请求高峰。
MaxRequestsPerChild:设置每一个子进程在其生存期内容许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。若是MaxRequestsPerChild为"0",子进程
将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:能够防止(偶然的)内存泄漏无限进行而耗尽内存;
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减小活动进程的数量。
若是设置为非零值,建议设为10000-30000之间的一个值。
公式:
ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild
#配置Apache服务器默认设置 httpd-default.conf
Timeout 300
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
Timeout:设置服务器在判定请求失败前等待的秒数。默认值300。
KeepAlive:设置是否启用HTTP持久连接,On 表明打开,Off 表明关闭。若是用于同一页面包含大量静态文件的应用,设置为On,以提升性能;若是用于主要为动态页面的应用,
设置为Off,以节约内存资源;若是服务器前跑有squid或者其它七层设备,设置为On。
MaxKeepAliveRequests:限制当启用KeepAlive时,每一个链接容许的请求数量。若是将此值设为"0",将不限制请求的数目。笔者建议将此值设为100-500之间的一个值,以确保最优
的服务器性能。
KeepAliveTimeout:设置持久连接中服务器在两次请求之间等待的秒数。对于高负荷服务器来讲,KeepAliveTimeout值较大会致使一些性能方面的问题:超时值越大,与空闲客户
端保持链接的进程就越多。
UseCanonicalName:配置服务器如何肯定它本身的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古董级的不提供"Host:"头的浏览器使用。笔者建议
设置为Off。
AccessFileName:设置分布式配置文件的名字,默认为.htaccess。若是为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各
级目录中查找此配置文件,所以会带来性能问题,笔者建议关闭分布式配置文件功能。
ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操做系统类型和编译进的模块描述信息,同时还控制着 ServerSignature指令的显示内容。可选值
为Full | OS | Minor | Minimal | Major | Prod。笔者建议设置为显示最少信息的Prod。
ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增长一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外
建立一个指向 ServerAdmin的"mailto:"部分。建议使用默认值Off。
HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会形成明显的时间消耗,建议设置为Off。
#配置mod_deflate压缩模块 httpd-deflate.conf
mod_deflate模块提供了DEFLATE输出过滤器,容许服务器在将输出内容发送到客户端之前进行压缩,以节约带宽。
编辑mod_deflate压缩模块设置文件:
<IfModule mod_deflate.c>
DeflateMemLevel 9
DeflateWindowSize 15
DeflateBufferSize 8096
DeflateCompressionLevel 8
## 调试时去掉下面5行前的注释符,用以记录压缩日志
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %b %{outstream}n/%{instream}n (%{ratio}n%%) "%{User-agent}i"' deflate
#CustomLog logs/deflate_log deflate
## 插入DEFLATE过滤器,以启用输出压缩
SetOutputFilter DEFLATE
## Netscape 4.x 有一些问题,仅压缩txt/html类型
BrowserMatch ^Mozilla/4 gzip-only-text/html
## Netscape 4.06-4.08不能处理任何压缩内容,不进行压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
## MSIE 会假装成 Netscape ,可是事实上它没有问题
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
## 设置图片、mp三、压缩格式文件等不须要进行压缩内容
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
## 确保代理不会发送错误的内容
Header append Vary User-Agent env=!dont-vary
</IfModule>
DeflateMemLevel:指定zlib在压缩时最多可使用多少内存,取值范围在1到9之间。
DeflateWindowSize:定义zlib压缩窗口(compression window)的大小,取值范围在1到15之间,一般窗口越大压缩效果越好。
DeflateBufferSize:定义zlib一次压缩的片段的字节数,默认为8096。
DeflateCompressionLevel:设定压缩程度,越高的压缩程度就会有越好的压缩效果,同时也意味着占用越多的CPU资源。取值范围在 1(最低压缩率) 到 9(最高压缩率)之间,若是
不设置此指令,默认为zlib的默认值。
DeflateFilterNote:在日志中放置压缩率标记。
语法为:DeflateFilterNote type notename
notename就表示这个压缩率标记的名字,你能够为了某种统计目的将这个标记的名字添加到访问日志中。
type指定notename标记所记录的数据类型:Input,在标记中存储过滤器输入流的字节数;Output,在标记中存储过滤器输出流的字节数;Ratio,在标记中存储过滤器的压缩比(输
出/输入*100),这是type的默认值。
SetOutputFilter:设置用于在服务器应答发送到客户端以前使用的过滤器。若是多于一个过滤器,必须按照处理内容的顺序用分号(;)分隔。
BrowserMatch:基于User-Agent头有条件地设置环境变量。
SetEnvIfNoCase:根据大小写无关的客户端请求属性设置环境变量。
Headers:配置HTTP应答头。这个指令能够替换、合并、删除HTTP应答头。应答头紧跟在内容处理器和输出过滤器完工以后生成,这时候才能对头进行修改。
#配置mod_expires模块
这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expiration date)能够设置为相对于源文件的最后修改时刻或者客户端的访问时刻。这些
HTTP头向客户端代表了文档的有效性和持久性。若是有缓存,文档就能够从缓存(除已通过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过时或者失效,以
决定是否必须从服务器得到更新。
编辑mod_expires设置文件:httpd-expires.conf
## mod_expires设置文件
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault A300
ExpiresByType text/html A300
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType text/css A2592000
ExpiresByType text/js A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/x-javascript A2592000
</IfModule>
ExpiresActive:对其做用范围内的文档启用或禁用产生Expires和Cache-Control头的功能。若设置为 Off 则不会为其做用范围内的任何文档生成Expires和Cache-Control头(除非
被更低一层的规则改写,好比.htaccess文件)。若设置为 On 则会按照ExpiresByType和ExpiresDefault指令定义的标准为其做用范围内的文档生成Expires和Cache-Control 头。
注意,这个指令并不保证Expires或Cache-Control头必定会产生。若是定义的标准不规范,将不会产生这两个头,其效果是好像从未设置过这个指令同样。
ExpiresByType:为指定MIME类型的文档配置Expires头的值。
语法为:ExpiresByType MIME-type <code>seconds
seconds参数设置了添加到基准时间以构造有效期限的秒数。Cache-Control: max-age的计算方法是从有效期减去当前请求时间并转化为秒数。
基准时刻能够是源文件的最后修改时刻或者客户端对源文件的访问时刻,至于使用那一个则由<code>指定。"M"表示源文件的最后修改时刻,"A"表示客户端对源文件的访问时刻。
须要注意的是<code>和seconds之间没有空格。若是使用"M",全部当前缓存中的文档副本都将在同一时刻过时,这个可能对按期更新的URL(好比位于同一位置的每周通告)颇有好处
。若是使用"A",则每一个客户端所获得的有效期是不同的,这个可能对那些几乎不更新的图片文件颇有好处,特别是对于一组都引用了相同图片的相关文档。
ExpiresDefault:设置其做用范围内的全部文档的默认有效期的计算方法,它能够被ExpiresByType指令基于MIME类型被改写。
语法为:ExpiresDefault <code>seconds
<code>seconds同ExpiresByType一致。
#最后配置一下虚拟主机 httpd-vhost.conf
#这里重点介绍一下基于多端口的配置
NameVirtualHost *:81
NameVirtualHost *:82
NameVirtualHost *:83
<VirtualHost *:81>
ServerAdmin jafy@jafy00.com
DocumentRoot /www1
ServerName www.jafy00.com
ErrorLog logs/www1-error.log
CustomLog logs/www1-access_log common
</VirtualHost>
<VirtualHost *:82>
<Directory "/www2" >
Options FollowSymLinks
#Deny from all
Allow from all
</Directory>
ServerAdmin jafy@jafy00.com
DocumentRoot /www2
ServerName www.jafy00.comDirectoryIndex index.php index.htmlErrorLog logs/www2-error.logCustomLog logs/www2-access_log combined</VirtualHost>