Apache的配置優化

Apache的配置優化

【APACHE的工做方式】

prefork模式(默認)javascript

這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工做方式相似於Apache 1.3。它適合於沒有線程安全庫,須要避免線程兼容性問題的系統。它是要求將每一個請求相互獨立的狀況下最好的MPM,這樣若一個請求出現問題就不會影響到其餘請求。php

這個MPM具備很強的自我調節能力,只須要不多的配置指令調整。最重要的是將MaxClients設置爲一個足夠大的數值以處理潛在的請求高峯,同時又不能太大,以至須要使用的內存超出物理內存的大小。css

worker模式html

此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。因爲使用線程來處理請求,因此能夠處理海量請求,而系統資源的開銷小於基於進程的MPM。可是,它也使用了多進程,每一個進程又有多個線程,以得到基於進程的MPM的穩定性。java

【apache配置參數備註】

生產配置舉例

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

httpd.confweb

參數介紹

一、KeepAlive On/Offsql

KeepAlive指的是保持鏈接活躍,相似於Mysql的永久鏈接。換一句話說,若是將KeepAlive設置爲On,那麼來自同一客戶端的請求就不須要再一次鏈接,避免每次請求都要新建一個鏈接而加劇服務器的負擔。通常狀況下,圖片較多的網站應該把KeepAlive設爲On。apache

二、KeepAliveTimeOut number安全

若是第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次鏈接就會中斷,再新建第二個鏈接。它的設置通常考慮圖片或者JS等文件兩次請求間隔,個人設置經驗爲3-5秒。服務器

三、MaxKeepAliveRequests 100

一次鏈接能夠進行的HTTP請求的最大請求次數。將其值設爲0將支持在一次鏈接內進行無限次的傳輸請求。事實上沒有客戶程序在一次鏈接中請求太多的頁面,一般達不到這個上限就完成鏈接了。

四、StartServers 10

設置服務器啓動時創建的子進程數量。由於子進程數量動態的取決於負載的輕重,全部通常沒有必要調整這個參數。

五、MinSpareServers 10

設置空閒子進程的最小數量。所謂空閒子進程是指沒有正在處理請求的子進程。若是當前空閒子進程數少於MinSpareServers ,那麼Apache將以最大每秒一個的速度產生新的子進程。只有在很是繁忙機器上才須要調整這個參數。將此參數設的太大一般是一個壞主意。

六、MaxSpareThreads 20

設置空閒子進程的最大數量。若是當前有超過MaxSpareServers數量的空閒子進程,那麼父進程將殺死多餘的子進程。只有在很是繁忙機器上才須要調整這個參數。將此參數設的太大一般是一個壞主意。若是你將該指令的值設置爲比MinSpareServers小,Apache將會自動將其修改爲」MinSpareServers+1″。

七、ServerLimit 1000

服務器容許配置的進程數上限。只有在你須要將MaxClients設置成高於默認值256的時候才須要使用。要將此指令的值保持和MaxClients同樣。修改此指令的值必須徹底中止服務後再啓動才能生效,以restart方式重啓動將不會生效。

八、MaxClients 1000

用於伺服客戶端請求的最大請求數量(最大子進程數),任何超過MaxClients限制的請求都將進入等候隊列。默認值是256,若是要提升這個值必須同時提升ServerLimit的值。筆者建議將初始值設爲(以Mb爲單位的最大物理內存/2),而後根據負載狀況進行動態調整。好比一臺4G內存的機器,那麼初始值就是4000/2=2000。

九、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
相關文章
相關標籤/搜索