/ 中存储网

Apache服务器优化配置指南

2014-03-23 14:38:01 来源:itjs.cn
###=========httpd.conf begin===================

##Apache主配置文件

##设置服务器的基础目录,默认为Apache安装目录

ServerRoot "/usr/local/apache-2.2.6"

##设置服务器监听的IP和端口

Listen 80

##设置管理员邮件地址 ##设置服务器用于辨识自己的主机名和端口号

ServerName www.uenu.com:80

###设置动态加载的DSO模块

##如果需要提供基于文本文件的认证,加载此模块,否则注释掉

LoadModule authn_file_module modules/mod_authn_file.so

##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉

#LoadModule authn_dbm_module modules/mod_authn_dbm.so

##如果需要提供匿名用户认证,加载此模块,否则注释掉

#LoadModule authn_anon_module modules/mod_authn_anon.so

##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉

#LoadModule authn_dbd_module modules/mod_authn_dbd.so

##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉

LoadModule authn_default_module modules/mod_authn_default.so

##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。

LoadModule authz_host_module modules/mod_authz_host.so

##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉

#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉

LoadModule authz_user_module modules/mod_authz_user.so

##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉

#LoadModule authz_dbm_module modules/mod_authz_dbm.so

##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉

#LoadModule authz_owner_module modules/mod_authz_owner.so

##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉

LoadModule authz_default_module modules/mod_authz_default.so

##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块

LoadModule auth_basic_module modules/mod_auth_basic.so

##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块

#LoadModule auth_digest_module modules/mod_auth_digest.so

##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用

LoadModule file_cache_module modules/mod_file_cache.so

##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载

LoadModule cache_module modules/mod_cache.so

##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载

LoadModule disk_cache_module modules/mod_disk_cache.so

##此模块为mod_cache提供基于内存的缓存管理,推荐加载

LoadModule mem_cache_module modules/mod_mem_cache.so

##如果需要管理SQL数据库连接,为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)

#LoadModule dbd_module modules/mod_dbd.so

##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用

#LoadModule dumpio_module modules/mod_dumpio.so

##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉

#LoadModule ext_filter_module modules/mod_ext_filter.so

##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉

#LoadModule include_module modules/mod_include.so

##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉

LoadModule filter_module modules/mod_filter.so

##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉

LoadModule deflate_module modules/mod_deflate.so

##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉

LoadModule log_config_module modules/mod_log_config.so

##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉

#LoadModule logio_module modules/mod_logio.so

##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉

LoadModule env_module modules/mod_env.so

##如果允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容,加载此模块(推荐),否则注释掉

LoadModule expires_module modules/mod_expires.so

##如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉

LoadModule headers_module modules/mod_headers.so

##如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉

#LoadModule ident_module modules/mod_ident.so

##如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉

LoadModule setenvif_module modules/mod_setenvif.so

##此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载

#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

##此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载

#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

##如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉

LoadModule mime_module modules/mod_mime.so

##如果允许Apache提供DAV协议支持,加载此模块,否则注释掉

#LoadModule dav_module modules/mod_dav.so

##此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载

#LoadModule status_module modules/mod_status.so

##如果需要自动对目录中的内容生成列表(类似于"ls"或"dir"命令),加载此模块(会带来安全问题,不推荐),否则注释掉

#LoadModule autoindex_module modules/mod_autoindex.so

##如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉

#LoadModule asis_module modules/mod_asis.so

##如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉

#LoadModule info_module modules/mod_info.so

##如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉

#LoadModule cgi_module modules/mod_cgi.so

##此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉

#LoadModule cgid_module modules/mod_cgid.so

##此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉

#LoadModule dav_fs_module modules/mod_dav_fs.so

##如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉

#LoadModule vhost_alias_module modules/mod_vhost_alias.so

##如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉

LoadModule negotiation_module modules/mod_negotiation.so

##如果需要指定目录索引文件以及为目录提供"尾斜杠"重定向,加载此模块(推荐),否则注释掉

LoadModule dir_module modules/mod_dir.so

##如果需要处理服务器端图像映射,加载此模块,否则注释掉

#LoadModule imagemap_module modules/mod_imagemap.so

##如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉

#LoadModule actions_module modules/mod_actions.so

##如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉

LoadModule speling_module modules/mod_speling.so

##如果允许在URL中通过"/~username"形式从用户自己的主目录中提供页面,加载此模块,否则注释掉

#LoadModule userdir_module modules/mod_userdir.so

##此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载

LoadModule alias_module modules/mod_alias.so

##如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉

LoadModule rewrite_module modules/mod_rewrite.so

##设置子进程的用户和组

<IfModule !mpm_netware_module>

User daemon

Group daemon

</IfModule>

##设置默认WEB文档根目录

DocumentRoot "/usr/local/apache-2.2.6/htdocs"

##设置WEB文档根目录的默认属性

<Directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

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>

##指定错误日志文件

ErrorLog logs/error_log

##指定记录到错误日志的消息级别

LogLevel warn

<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脚本目录及别名

<IfModule alias_module>

ScriptAlias /cgi-bin/ "/usr/local/apache-2.2.6/cgi-bin/"

</IfModule>

##在以线程式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>

###==========httpd.conf end===================

 4.3.3 配置多路处理模块(MPM)

编辑多路处理模块配置文件:

vi /usr/local/apache-2.2.6/conf/extra/httpd-mpm.conf

如果使用prefork多路处理模块,按下面的提示修改:

###=============httpd-mpm.conf prefork begin===================

##设置prefork多路处理模块

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

ServerLimit    4000

MaxClients 4000

MaxRequestsPerChild 0

</IfModule>

###=============httpd-mpm.conf prefork end===================

   指令说明:

  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多路处理模块,按下面的提示修改:

###=============httpd-mpm.conf worker begin===================

##设置worker多路处理模块

<IfModule mpm_worker_module>

StartServers 5

ServerLimit 20

ThreadLimit 200

MaxClients 4000

MinSpareThreads 25

MaxSpareThreads 250

ThreadsPerChild 200

MaxRequestsPerChild 0

</IfModule>

###=============httpd-mpm.conf worker end===================

指令说明:

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

 4.3.4 配置Apache服务器默认设置

编辑Apache服务器默认设置文件:

vi /usr/local/apache-2.2.6/conf/extra/httpd-default.conf

按下面的提示修改:

###=============httpd-default.conf begin===================

##Apache默认设置文件

Timeout 120

KeepAlive Off

MaxKeepAliveRequests 100

KeepAliveTimeout 5

UseCanonicalName Off

AccessFileName .htaccess

ServerTokens Prod

ServerSignature Off

HostnameLookups Off

###=============httpd-default.conf end====================

指令说明:

  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。