1.Apache安裝配置
Apache的安裝,考慮只用于Tomcat的前段代理,處理圖片和靜態文件的請求,并把動態請求轉發到tomcat服務處理。本文使用編譯安裝方式,把跟需求無關的模塊關閉,只使用最小的模塊編譯,提高軟件性能。
配置編譯命令請參考:
http://www.uplinux.com/download/doc/apache/ApacheManual/install.html#configure
編譯參數說明:
編譯和包含是兩個不同的概念。編譯是指這個模塊被編譯了,要想使用它,只用簡單的修改httpd.conf加上LoadModule xxx_module? libexec/mod_xxx.so 明確指出。
用以前命令可以查看缺省時已編譯和包含進去的模塊。不用顯式的--enable-MODULE[=shared] 和LoadModule 操作。就已經可以使用的。
- core.c:Apache HTTP 服務器提供的核心功能。必須要有的。
- mod_access.c:安全認證大大降低訪問速度,建議disable it .
- mod_auth.c :安全認證大大降低訪問速度,建議disable it .
- mod_include.c:server side include已經過時了,建議disable it .
- mod_log_config.c:用于定制log格式.最好保留.
- mod_env.c:修改傳送到 CGI 腳本和 SSI 頁面的系統環境(變量)。一般說來,可以不需要。
- mod_setenvif.c :用戶設置環境變量和認證相關,如果沒有使用壓縮輸出,建議disable it .
- prefork.c:Implements a non-threaded, pre-forking web server。參考下面的mpm介紹。
- http_core.c:Apache HTTP 服務器提供的核心功能。必須要有的。
- mod_mime.c:用于增加文件應用的關聯。最好保留。
- mod_status.c:Provides information on server activity and performance 。一般說來,可以不需要。
- mod_autoindex.c:不需要將沒有缺省index文件的目錄下所有文件列出,建議disable it .
- mod_asis.c:盡量不使用CGI:一直是Apache安全問題最多的地方,建議disable it .
- mod_cgi.c:盡量不使用CGI:一直是Apache安全問題最多的地方,建議disable it .
- mod_negotiation.c :內容協商,以根據瀏覽器提供的設置選擇不同媒介類型、語言、字符集和編碼的最佳表現,還有對來自瀏覽器的不完整內容協商信息作智能處理的能力。一般說來,可以不需要。
- mod_dir.c:用于缺省index文件:index.php等。我們現在的應用不需要這個。看情況而定。
- mod_imap.c:盡量不使用CGI:一直是Apache安全問題最多的地方,建議disable it .
- mod_actions.c:盡量不使用CGI:一直是Apache安全問題最多的地方,建議disable it
- mod_userdir.c:比如:需要在~/username/下調試php.可用可不用.建議disable it .
- mod_alias.c:比如:需要將以前的URL進行轉向或者需要使用CGI script-alias.建議disable it .
- mod_so.c :如果編譯中包含有任何動態模塊,則mod_so模塊會被自動包含進核心。如果希望核心能夠裝載DSO,而不實際編譯任何動態模塊,需要明確指定--enable-so。我們的應用使用靜態編譯,不需要它。建議disable it .
- CC="pgcc" CFLAGS="-O2" :編譯器參數優化
- --profix:apache的安裝目錄,默認是安裝在/usr/local/apache
$?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
安裝完成后,因為編譯關閉了很多默認的功能模塊,所以直接使用發布的默認配置是不能啟動服務器的,需要作調整。
設apache的安裝目錄為$APACHE_HOME
備份默認配置文件$APACHE_HOME/conf/httpd.conf,然后使用highperformance.conf最為配置文件
$?mv?httpd.conf?httpd.conf_bak
$?cp?highperformance.conf?httpd.conf
$?../bin/apachectr?start
如果啟動失敗,請屏蔽調httpd.conf中的mod_access相關命令,如Order等,關于目錄權限的控制在本例中可以使用變通方式解決,使用沒有加載目錄權限控制功能。
啟動驗證,訪問http://$IP/,如果正常顯示頁面,表示成功。
2.PMP
MPM(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用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的MPM之一。
prefork的工作原理是,控制進程在最初建立“StartServers”個子進程后,為了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設置的值為止。這就是預派生(prefork)的由來。這種模式可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能。
下面是prefork的默認配置段:
<IfModule prefork.c>
StartServers???????? 5?
MinSpareServers????? 5?
MaxSpareServers???? 10?
MaxClients???????? 150?
MaxRequestsPerChild? 0
</IfModule>
MinSpareServers
設置了最小的空閑進程數。
MaxSpareServers
設置了最大的空閑進程數,如果空閑進程數大于這個值,Apache會自動kill掉一些多余進程。這個值不要設得過大,但如果設的值比MinSpareServers小,Apache會自動把其調整為MinSpareServers+1。如果站點負載較大,可考慮同時加大MinSpareServers和MaxSpareServers。
MaxClients
MaxClients是這些指令中最為重要的一個,設定的是Apache可以同時處理的請求,是對Apache性能影響最大的參數。其缺省值150是遠遠不夠的,如果請求總數已達到這個值(可通過ps -ef|grep
http|wc -l來確認),那么后面的請求就要排隊,直到某個已處理請求完畢。這就是系統資源還剩下很多而HTTP訪問卻很慢的主要原因。系統管理員可以根據硬件配置和負載情況來動態調整這個值。雖然理論上這個值越大,可以處理的請求就越多,但Apache默認的限制不能大于256(在2.0中源于#define DEFAULT_SERVER_LIMIT 256)。如果把這個值設為大于256,那么Apache將無法起動。事實上,256對于負載稍重的站點也是不夠的。在Apache 1.3中,這是個硬限制。如果要加大這個值,必須在“configure”前手工修改的源代碼樹下的src/include/httpd.h中查找256,就會發現“#define HARD_SERVER_LIMIT
MaxRequestsPerChild
設置的是每個子進程可處理的請求數。每個子進程在處理了“MaxRequestsPerChild”個請求后將自動銷毀。0意味著無限,即子進程永不銷毀。雖然缺省設為0可以使每個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:可防止意外的內存泄漏;在服務器負載下降的時侯會自動減少子進程數。
Apache+jk2的每個進程的的大小是
apache_max_process_with_good_perfermance
< (
apache_max_process =400 * 1.5 = 700
即最佳性能設置為:400
按照上面的分析,本系統的的prefork.c配置為:
ServerLimit??????400
MaxClients???????400
StartServers?????5
MinSpareServers??5
MaxSpareServers?10
</IfModule>
3.gzip壓縮輸出
通過加入mode_deflate模塊對服務器輸出壓縮傳輸,可以減小輸出壓力,節約帶寬。
可以減少40%左右的流量,減少機器用于傳輸的負載.
壓縮輸出的配置需要以下三個模塊功能支持
mod_setenvif.c
mod_deflate
mod_headers
具體說明請參考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/
配置
參考:http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_deflate.html
#?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>