之前VPS使用的是默認的Apache配置,感覺還行,不過隨著博客的人流量上升,顯然這種配置無法滿足需求了;下面是Apache官方手冊中給出的幾條優化配置建議,筆者將其整理出來,對Apache服務器的運行效率是有幫助的。
- 控制MaxClients的設置,以避免服務器產生太多的子進程而發生交換。
進程間的數據交換會占用很大內存,數據交換產生的滯后使用戶總感覺”不夠快”,所以用戶就可能去按”停止”和”刷新”,從而帶來更大的負載。一般建議小網站將MaxClients設置為12~24。 - 選擇更好的硬件,CPU、內存、硬盤等等
這句很雞肋啦,如果有更多的銀子,誰不愿意換更好的呢?^_^ - 定期更新操作系統,打上系統補丁;如果你的操作系統支持sendfile()系統調用,則務必安裝帶有此功能的版本或補丁
在支持sendfile的系統中,Apache2可以更快地發送靜態內容而且占用較少的CPU時間。 - HostnameLookups設置為off
盡量較少DNS查詢的次數。如果你使用了任何”Allow from domain”或”Deny from domain”指令(也就是domain使用的是主機名而不是IP地址),則代價是要進行兩次DNS查詢(一次正向和一次反向,以確認沒有作假)。所以,為了得到最高的性能,應該避免使用這些指令(不用域名而用IP地址也是可以的)。 - 為Directory加上FollowSymLinks
如果網站空間中沒有使用 Options FollowSymLinks ,Apache就必須執行額外的系統調用以驗證符號連接。例如:在請求”/index.html”時,Apache將對”/www”、”/www/htdocs”、”/www/htdocs/index.html”執行lstat()調用。而且lstat()的執行結果不被緩存,因此對每一個請求都要執行一次。 - 將AllowOverride設置為None
對于使用虛擬主機的朋友可能會覺得不方便,這樣設置將會使.htaccess中的設置失效,如果實在需要,并且在有條件的情況下,請在conf配置文件中直接寫入rewrite規則 - 禁用內容協商
盡管在實踐中,內容協商的好處大于性能的損失,如果你很在意那一點點的性能損失,則可以禁止使用內容協商。但是仍然有個方法可以提高服務器的速度,就是不要使用通配符。 - MaxRequestsPerChild設置為非0以防止內存泄漏
MaxRequestsPerChild用于控制Apache子進程在何時銷毀,默認為0,代表永不銷毀子進程,這可能會存在內存泄漏的風險,建議設置為10000 - KeepAlive與KeepAliveTimeOut
如果你使用的使mpm_prefork模式(Apache默認安裝),那么建議你將KeepAlive設置為off;因為,開啟keepalive會為每個客戶端建立一個連接,prefork不會創建線程,估計100個用戶同時訪問你的網站,Apache就會掛了~,如果你實在想開啟,那么請將KeepAliveTimeOut 時間設置更短些,例如5,默認是60秒呢 - 不要靜態編譯Apache
盡管會有很多人和你說靜態編譯的好處,同時,你自己也想自己編譯一把,以體驗樂趣~但是,將模塊已靜態方式編譯進Apache絕對不是一個好選擇,尤其是對于缺銀子的站長們來說,一個配置不當,Apache會在啟動時就占用光你所有的內存,最后拖垮服務器~
?
評論
人好哇! 撰寫:
apache安裝與配置。我一直用Apache的Worker模式,所以負載高一點也無所謂。不過MaxRequestsPerChild設置為非0是很必要的,避免泄露內存引發問題,KeepAlive也是一個比較需要權衡的參數。博主所說的都很對!
freemouse 撰寫:
Worker模式好處很多,不過,對于小流量的網站,無需太多關心啦。
?
?
apache環境變量設置。摘自:http://www.cnphp.info/10-tips-for-optimize-Apache-options.html
?