您的位置:首页 > 运维架构 > Apache

Apache的配置优化

2015-06-29 23:09 741 查看

Apache的配置优化

【APACHE的工作方式】

prefork模式(默认)

这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

worker模式

此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

【apache配置参数备注】

生产配置举例

ServerLimit             1000
StartServers            10
MinSpareServers         10
MaxSpareServers         20
MaxClients              1000
MaxRequestsPerChild     5000

httpd.conf

参数介绍

1、KeepAlive On/Off

KeepAlive指的是保持连接活跃,类似于Mysql的永久连接。换一句话说,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。一般情况下,图片较多的网站应该把KeepAlive设为On。

2、KeepAliveTimeOut number

如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。它的设置一般考虑图片或者JS等文件两次请求间隔,我的设置经验为3-5秒。

3、MaxKeepAliveRequests 100

一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。

4、StartServers 10

设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。

5、MinSpareServers 10

设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。

6、MaxSpareThreads 20

设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。

7、ServerLimit 1000

服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。

8、MaxClients 1000

用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。

9、MaxRequestsPerChild 5000

apache.exe进程包括一个是父进程、一个是子进程,父进程接到访问请求后,将请求交由子进程处理。MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。  如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。所以一般情况下,如果你发现服务器的内存直线上升,建议修改该参数试试。

Apache插件配置

#LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_default_module modules/mod_authn_default.so
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
#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
#LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule include_module modules/mod_include.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule version_module modules/mod_version.so
LoadModule mime_module modules/mod_mime.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
#LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule asis_module modules/mod_asis.so
#LoadModule info_module modules/mod_info.so
#LoadModule cgi_module modules/mod_cgi.so
#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
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule jk_module modules/mod_jk.so

Apache日志配置

LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

#LogFormat "%h %{HTTP_HOST}i  %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

LogFormat "%A - %h %{HTTP_HOST}i  %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O \"%V %v:%p %T\" %{cookie}n" combinedio

#CustomLog "logs/access_log" common

其中增加了%{cookie}配置,以供大数据平台分析使用;

Apache状态检查

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost 192.168.1.0/24
</Location>

Apache JkWorker配置

#configure for mod_jk
JkWorkersFile   conf/workers.properties
JkShmFile       logs/mod_jk.shm
JkLogFile       logs/mod_jk.log
JkLogLevel      error

Apache压缩配置

gzip可以级大的加速网站.有时压缩比率高到80%,近来测试了一下,最少都有40%以上,还是相当不错的.在Apache2之后的版本,模块名不叫gzip,而叫mod_deflate

如果要开启gzip的话,一定要打开下面二个模块.

LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so

设置压缩比率,取值范围在 1(最低) 到 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源.

DeflateCompressionLevel 6
AddOutputFilter DEFLATE html xml js css
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
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

Apache Cookie配置

<IfModule usertrack_module>
CookieExpires " 1 weeks"
CookieStyle RFC2965
CookieName _m_data_
CookieTracking on
</IfModule>

Apache静态页面配置

主要用于后台Tomcat没办法正常使用时,主页提示之用,如:升级页面、网站临时异常;

#<VirtualHost *:80>
#    ServerName www.domain.com
#    ServerAlias www.domain.com
#    DocumentRoot "/domain/apache2.2.25/htdocs"
#    ErrorLog "|/domain/apache2.2.25/bin/rotatelogs /domain/apache2.2.25/logs/update/errorlog-%Y-%m-%d 20M"
#</VirtualHost>

#<VirtualHost *:80>
#    ServerName *.domain.com
#    ServerAlias *.domain.com
#    DocumentRoot "/domain/apache2.2.25/htdocs"
#    ErrorLog "|/domain/apache2.2.25/bin/rotatelogs /domain/apache2.2.25/logs/update/errorlog-%Y-%m-%d 20M"
#</VirtualHost>

Apache虚拟主机

<VirtualHost *:80>
ServerName www.domain.com
ServerAlias www.domain.com
DocumentRoot "/domain/source/www/deploy/domain"
SetEnvIf Request_URI \.gif NOLOG
SetEnvIf Request_URI \.jpg NOLOG
SetEnvIf Request_URI \.png NOLOG
SetEnvIf Request_URI \.swf NOLOG
SetEnvIf Request_URI \.css NOLOG
SetEnvIf Request_URI \.js NOLOG
SetEnvIf Request_URI \.ico NOLOG
#SetEnvIf Request_URI "/fckeditor/.*" NOLOG
ErrorLog "|/domain/apache2.2.25/bin/rotatelogs /domain/apache2.2.25/logs/error/domain-error-%Y%m%d.log 5M"
CustomLog "|/domain/apache2.2.25/bin/rotatelogs /domain/apache2.2.25/logs/access/domain-access-%Y%m%d.log 86400 480" combinedio env=!NOLOG
AddOutputFilterByType DEFLATE text/html
JkMount /* domain_worker
JKUnmount /*.js    domain_worker
JKUnmount /*.css   domain_worker
JKUnmount /*.img   domain_worker
JKUnmount /*.jpg   domain_worker
JKUnmount /*.png   domain_worker
JKUnmount /*.map   domain_worker
JKUnmount  /image/*  domain_worker
JKUnmount  /images/*  domain_worker
JKUnmount  /upload/*  domain_worker
KeepAlive off
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType text/plain A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/javascript A2592000
Header unset Expires
DirectoryIndex index.htm
RewriteEngine on
RewriteCond %{HTTP_HOST} ^juran.cn$ [NC]
RewriteRule ^/(.*) http://www.domain.com/$1 [R=301,L]
RewriteRule ^.+/$ index.htm [L,R]
ErrorDocument 404 /error.htm
</VirtualHost>

<Directory "/domain/source/www/deploy/domain/WEB-INF">
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

<Directory "/domain/source/www/deploy/domain">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Rewrite 配置

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt) #定义重写发生的条件
RewriteRule ^(.*)$ /index.php/$1 [L] 
RewriteLog D:/lib/rewrite.log #设置rewrite日志文件,主要用来rewrite调试
RewriteLogLevel 3 #设置rewrite日志文件记录的等级,主要用来rewrite调试

Apache workers.properties配置

worker.list=controller,domain_worker,domain_worker1

worker.domain_worker.port=8009
worker.domain_worker.host=localhost1
worker.domain_worker.type=ajp13

worker.domain_worker1.port=8009
worker.domain_worker1.host=localhost2
worker.domain_worker1.type=ajp13

worker.controller.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=domain_worker,domain_worker1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: