|
本文針對apache web服務(wù)器的安裝配置收集有效的一些經(jīng)驗(yàn)和方法,用于交流。
1.<!--[endif]-->Apache安裝配置Apache的安裝,考慮只用于Tomcat的前段代理,處理圖片和靜態(tài)文件的請求,并把動態(tài)請求轉(zhuǎn)發(fā)到tomcat服務(wù)處理。本文使用編譯安裝方式,把跟需求無關(guān)的模塊關(guān)閉,只使用最小的模塊編譯,提高軟件性能。 配置編譯命令請參考: http://www./download/doc/apache/ApacheManual/install.html#configure 編譯參數(shù)說明: 編譯和包含是兩個不同的概念。編譯是指這個模塊被編譯了,要想使用它,只用簡單的修改httpd.conf加上LoadModule xxx_module libexec/mod_xxx.so 明確指出。 用以前命令可以查看缺省時已編譯和包含進(jìn)去的模塊。不用顯式的--enable-MODULE[=shared] 和LoadModule 操作。就已經(jīng)可以使用的。
$ cd /tools
$ tar –xzvf apache-2.0.59.tar.gz $ cd httpd2.0.59 $ CC="pgcc" CFLAGS="-O2" \ ./configure --prefix=/usr/apache-2.0.59 \ --disable-access \ --disable-auth \ --disable-include \ --disable-env \ --disable-status \ --disable-autoindex \ --disable-asis \ --disable-cgi \ --disable-negotiation \ --disable-imap \ --disable-actions \ --disable-userdir \ --disable-alias \ --enable-deflate \ --enable-headers \ --enable-setenvif \ --enable-so $ make $ make install 安裝完成后,因?yàn)榫幾g關(guān)閉了很多默認(rèn)的功能模塊,所以直接使用發(fā)布的默認(rèn)配置是不能啟動服務(wù)器的,需要作調(diào)整。 設(shè)apache的安裝目錄為$APACHE_HOME 備份默認(rèn)配置文件$APACHE_HOME/conf/httpd.conf,然后使用highperformance.conf最為配置文件 $ cd $APACHE_HOME/conf/
$ mv httpd.conf httpd.conf_bak $ cp highperformance.conf httpd.conf $ ../bin/apachectr start
如果啟動失敗,請屏蔽調(diào)httpd.conf中的mod_access相關(guān)命令,如Order等,關(guān)于目錄權(quán)限的控制在本例中可以使用變通方式解決,使用沒有加載目錄權(quán)限控制功能。 啟動驗(yàn)證,訪問http://$IP/,如果正常顯示頁面,表示成功。 <!--[if !supportLists]-->2.<!--[endif]-->PMPMPM(Multi-Processing Modules,多道處理模塊) 指定MPM的方法 $ ./configure --help|grep mpm 顯示如下: --with-mpm=MPM Choose the process model for Apache to use. MPM={beos|worker|prefork|mpmt_os2| perchild|leader|threadpool} 主要闡述prefork,如果不用“--with-mpm”顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM,prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;prefork用單獨(dú)的子進(jìn)程來處理不同的請求,進(jìn)程之間是彼此獨(dú)立的,這也使其成為最穩(wěn)定的MPM之一。 prefork的工作原理是,控制進(jìn)程在最初建立“StartServers”個子進(jìn)程后,為了滿足MinSpareServers設(shè)置的需要創(chuàng)建一個進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個,再等待一秒鐘,繼續(xù)創(chuàng)建四個……如此按指數(shù)級增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒32個,直到滿足MinSpareServers設(shè)置的值為止。這就是預(yù)派生(prefork)的由來。這種模式可以不必在請求到來時再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開銷以增加性能。 下面是prefork的默認(rèn)配置段: <IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> MinSpareServers 設(shè)置了最小的空閑進(jìn)程數(shù)。 MaxSpareServers 設(shè)置了最大的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個值,Apache會自動kill掉一些多余進(jìn)程。這個值不要設(shè)得過大,但如果設(shè)的值比MinSpareServers小,Apache會自動把其調(diào)整為MinSpareServers+1。如果站點(diǎn)負(fù)載較大,可考慮同時加大MinSpareServers和MaxSpareServers。 MaxClients MaxClients是這些指令中最為重要的一個,設(shè)定的是Apache可以同時處理的請求,是對Apache性能影響最大的參數(shù)。其缺省值150是遠(yuǎn)遠(yuǎn)不夠的,如果請求總數(shù)已達(dá)到這個值(可通過ps -ef|grep http|wc -l來確認(rèn)),那么后面的請求就要排隊(duì),直到某個已處理請求完畢。這就是系統(tǒng)資源還剩下很多而HTTP訪問卻很慢的主要原因。系統(tǒng)管理員可以根據(jù)硬件配置和負(fù)載情況來動態(tài)調(diào)整這個值。雖然理論上這個值越大,可以處理的請求就越多,但Apache默認(rèn)的限制不能大于256(在2.0中源于#define DEFAULT_SERVER_LIMIT 256)。如果把這個值設(shè)為大于256,那么Apache將無法起動。事實(shí)上,256對于負(fù)載稍重的站點(diǎn)也是不夠的。在Apache 1.3中,這是個硬限制。如果要加大這個值,必須在“configure”前手工修改的源代碼樹下的src/include/httpd.h中查找256,就會發(fā)現(xiàn)“#define HARD_SERVER_LIMIT MaxRequestsPerChild 設(shè)置的是每個子進(jìn)程可處理的請求數(shù)。每個子進(jìn)程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0意味著無限,即子進(jìn)程永不銷毀。雖然缺省設(shè)為0可以使每個子進(jìn)程處理更多的請求,但如果設(shè)成非零值也有兩點(diǎn)重要的好處:可防止意外的內(nèi)存泄漏;在服務(wù)器負(fù)載下降的時侯會自動減少子進(jìn)程數(shù)。 Apache+jk2的每個進(jìn)程的的大小是 apache_max_process_with_good_perfermance < ( 即最佳性能設(shè)置為:400 按照上面的分析,本系統(tǒng)的的prefork.c配置為: <IfModule prefork.c>
ServerLimit 400 MaxClients 400 StartServers 5 MinSpareServers 5 MaxSpareServers 10 </IfModule> <!--[if !supportLists]-->3.<!--[endif]-->gzip壓縮輸出通過加入mode_deflate模塊對服務(wù)器輸出壓縮傳輸,可以減小輸出壓力,節(jié)約帶寬。 可以減少40%左右的流量,減少機(jī)器用于傳輸?shù)呢?fù)載. 壓縮輸出的配置需要以下三個模塊功能支持 mod_setenvif.c mod_deflate mod_headers 具體說明請參考:http://www./download/doc/apache/ApacheManual/mod/ 配置 參考:http://www./download/doc/apache/ApacheManual/mod/mod_deflate.html AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
# Compress everything except images <Location /> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x has some problems ![]() BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don‘t compress images SetEnvIfNoCase Request_URI \ \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don‘t deliver the wrong content Header append Vary User-Agent env=!dont-vary </Location> |
|
|