給大家推薦兩個Apache模塊,一個是mod_limitipconn,用來控制Apache的并發(fā)聯(lián)接數(shù),通過該模塊可以限制同一來源IP的并發(fā)聯(lián)接數(shù)。另一個模塊是bw_mod,用于Apache網(wǎng)站帶寬控制,可以根據(jù)來源IP,網(wǎng)段來劃分帶寬,也可以根據(jù)網(wǎng)站文件類型來限制帶寬,參數(shù)比較靈活,可以根據(jù)自己實際情況進行調(diào)整。
mod_limitipconn官方網(wǎng)址為:http://dominia.org/djao/limitipconn.html
mod_mod官方網(wǎng)址為:http://ivn.cl/apache/
具體安裝及配置過程就不介紹了,可以參見官方使用說明,這里只簡單地談?wù)勈褂眯牡谩?/p>
一、對于mod_limitipconn,其實該模塊不僅提供客戶端并發(fā)聯(lián)接數(shù)的控制能力,從安全角度來說還可以起到對抗固定來源IP地址發(fā)起的DOS攻擊,包括來源固定的大量訪問請求型攻擊(大量GET或POST請求型的攻擊),當同一來源IP地址的聯(lián)接數(shù)超過限定的值后,會彈回對方的訪問請求,給對方一個“503服務(wù)臨時無效”的響應(yīng)。當Apache服務(wù)器受到大量的訪問請求型攻擊的時候,由于大量的Apache進程及PHP和MYSQL運行消耗,會導致服務(wù)器資源迅速耗盡,網(wǎng)站打開緩慢或癱瘓。如果是此種類型的攻擊,使用mod_limitipconn模塊則可以有效地提升服務(wù)器的抗攻擊能力,因為大量的請求被彈回,節(jié)省了服務(wù)器運行PHP及MYSQL的性能消耗。當然只要請求進了80端口,不管是接受還是彈回請求,Aapche都有運行成本,所以此方法只能是減輕而無法解決,畢竟應(yīng)用層的處理效率是比較低的。
二、對于網(wǎng)站訪問量比較大、使用了mod_limitipconn模塊且限制同一客戶端并發(fā)聯(lián)接數(shù)低于3的情況下,如果用Apache默認的配置參數(shù),極可能經(jīng)常出現(xiàn)“服務(wù)臨時無效”的提示。因為Apache默認是設(shè)置“KeepAlive on”,且“KeepAliveTimeout 180”,所以一旦建立聯(lián)接,那么在3分鐘內(nèi)這個聯(lián)接是不會被釋放的。所以如果網(wǎng)站不同頁面點擊頻率比較高或圖片資源比較多的話,會經(jīng)常出現(xiàn)服務(wù)臨時無效的提示。那么有兩種方式去解決,一是加大并發(fā)聯(lián)接數(shù)的量,比如設(shè)置為普通站點10個并發(fā)聯(lián)接數(shù),圖片站點則20個。另一種方式就是如果你不想加大這個值的話,可以設(shè)置KeepAlive為off,然后縮短Timeout時間,這樣聯(lián)接會很快被釋放出來。具體情況根據(jù)需要去調(diào)整測試,以得到一個最適合自己站點情況的值。
三、如果要同時限制并發(fā)聯(lián)接數(shù)與帶寬的話,就用bw_mod+mod_limitipconn,因為雖然bw_mod也可以控制并發(fā)聯(lián)接數(shù),但他是針對某個目錄或整個網(wǎng)站的并發(fā)聯(lián)接數(shù),是用來控制服務(wù)器端的總聯(lián)接數(shù),比如設(shè)置MaxConnection all 1000,那么這個網(wǎng)站所能接受的最大并發(fā)聯(lián)接數(shù)為1000,而并不是限制每一客戶端的并發(fā)聯(lián)接數(shù),而mod_limitipconn則是針對同一來源IP的客戶端的并發(fā)聯(lián)接數(shù),所以這兩者的聯(lián)接數(shù)限制是有所區(qū)別的。
四、個人感覺用了bw_mod及mod_limitipconn模塊后,網(wǎng)站訪問速度有所下降,能憑直觀地感覺出來,并且CPU的負載有所上升。特別是在網(wǎng)站訪問量比較大的情況下,這兩個模塊會消耗一定的主機性能,所以輕重權(quán)衡這個得大家自己根據(jù)情況來采用了。另外bw_mod里有個參數(shù)是用來設(shè)置控制精度與頻率的,默認是1000毫秒,如果你想提高帶寬控制精度就改小這個數(shù)值,但會消耗更多的CPU資源,反之亦然,降低精度可提升性能。