Linux下Apache並發串連數和頻寬控制
Linux+Apache的穩定性、安全性和效能以及低廉的價格正在贏得越來越多的市場份額,使用Linux+Apache作網站伺服器的朋友也越來越多,而Apache作為一種http服務,相比FTP總是不容易控制,特別是當網站以http方式提供軟體/音樂下載時,若是每個使用者都開啟多個線程並沒有頻寬的限制,將很快達到http的最大串連數或者造成網路壅塞,使得網站的許多正常服務都無法運行。不過,Apache的使用者們早已開發出了mod_limitipconn和mod_bandwidth兩個模組,來控制http的並發串連數和使用者所能夠使用的頻寬,下面將以RedHatLinux
9.0+Apache 1.3.9來說明它們的使用方法。
一、使用mod_limitipconn限制Apache的並發串連數
mod_limitipconn可以控制每個IP地址同時串連伺服器某一個目錄的並發串連數,是一個非常有用的模組,其官方網頁是http://dominia.org/djao/limitipconn.html,由於本人使用Apache
1.3.9 版本.
mod_limitipconn for Apache 1.3x提供三種安裝方式,分別是tar包、rpm安裝檔案和rpm源檔案,由於rpm包只能用在 RedHat 7.x 版本,並且不支援檢測Proxy 伺服器,所以我們一般都使用tar包的安裝方式。
以管理員方式登陸伺服器,然後在伺服器上運行 wget http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz將mod_limitipconn的tar包下載到伺服器,然後按照再運行tar
zxvfmod_limitipconn-0.04.tar.gz將tar包解壓縮,會在目前的目錄下產生mod_limitipconn-0.04目錄,然後cdmod_limitipconn-0.04進入此目錄,下一步就是使用apxs將目錄中的mod_limitipconn.c編譯。這時,我們需要確定自己的Apache安裝在那個目錄,並且找到apxs命令放在哪裡。
通過命令whereisapxs,我們可以確定apxs命令的路徑,如我的apxs命令所在為/usr/local/apache/bin/apxs,則輸入/usr/local/apache/bin/apxs -c -i -a mod_limitipconn.c對mod_limitipconn.c進行編譯,此命令會自動在你Apache的設定檔httpd.conf中加入需要的資訊,並且將產生的mod_limitipconn.so模組拷貝到Apache的模組目錄。不過為了確認此命令是否正常運作,請首先檢查自己的Apache模組目錄(我的是/usr/local/apache),看內部是否含有mod_limitipconn.so檔案,沒有的話請將mod_limitipconn-0.04目錄中產生的檔案拷貝到此處。
剛才命令自動產生的httpd.conf可能有些錯誤,在我的系統中,它將LoadModule limitipconn_module modules/mod_limitipconn.so放在了
LoadModule python_module modules/mod_python.so
之間,而將AddModule mod_limitipconn.c放在了
AddModule mod_python.c
之間,直接造成了mod_limitipconn模組不能正常運行,所以請將這兩行分別移動到沒有的相應行中,然後請確認mod_status模組已經載入,並且在mod_status下添加了ExtendedStatus On這一行。這時我們的mod_limitipconn模組就安裝完畢,下一步就是對某個目錄進行並發串連數的設定了。
mod_limitipconn可以對全域和虛擬機器主機進行不同的限制,其文法結構都是
<IfModule mod_limitipconn.c>
<Location /> #所限制的目錄所在,此處表示主機的根目錄
MaxConnPerIP 3 #所限制的每個IP並發串連數為3個
NoIPLimit image/* #對圖片不做IP限制
</Location>
<Location /mp3> #所限制的目錄所在,此處表示主機的/mp3目錄
MaxConnPerIP 1 #所限制的每個IP並發串連數為1個
OnlyIPLimit audio/mpeg video #該限制只對視頻和音頻格式的檔案
</Location>
</IfModule>
當對全域進行限制時,將這段代碼放在httpd.conf檔案沒有VirtualHost的地方,若是對某個虛擬機器主機進行限制,請將其放在和之間,我們可以通過更改Location以及MaxConnPerIP方便的控制所限制的目錄和並發串連數。
最後,只要重新啟動Apache服務,並發串連數的限制就可以生效。
二、使用mod_bandwidth控制Apache的頻寬
Apache 1.3.9實際上帶有mod_bandwidth支援,只是沒有此模組的so檔案,我們所做的就是下載mod_bandwidth的源檔案進行編譯,並對mod_bandwidth進行相應的設定。
在下載之前,請先確認自己的Apache設定檔httpd.conf中是否含有
LoadModule bandwidth_module modules/mod_bandwidth.so
以及
AddModule mod_bandwidth.c
若是沒有,請加上
LoadModule bandwidth_module
libexec/apache/mod_bandwidth.so
AddModule mod_bandwidth.c 並且這兩行必須分別加在相應地區的最前面,使得這個模組以最低的優先順序運行.
確認後,請輸入 wget ftp://ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c將源檔案下載到伺服器,然後請使用apxs對其進行編譯,編譯方法和mod_limitipconn的基本相同,如我輸入/usr/local/apache/bin/apxs
-c mod_bandwidth.c -o/usr/local/apache(Apache的模組目錄),編譯器會自動將編譯成功的mod_bandwidth.so檔案放到Apache的模組目錄,您也可以自己確認一下,若是不正常,拷貝過去即可。
mod_bandwidth運行時需要一些特定的目錄,按照預設情況,請運行以下命令建立並更改目錄的許可權:
mkdir /tmp/apachebw
mkdir /tmp/apachebw/link
mkdir /tmp/apachebw/master
chmod -R 777 /tmp/apachebw
然後再開啟httpd.conf檔案,加上以下內容
<IfModule mod_bandwidth.c>
BandWidthDataDir "/tmp/apachebw/"
BandWidthModule on
</IfModule>
這時,我們就能夠對所需要限制頻寬的目錄進行相應的設定,此處的目錄請使用伺服器的絕對路徑。如我們想限制伺服器/home/www/thinkjam/download/soft目錄的下載速度,也就是限制網址http://download.thinkjam.org/soft目錄下軟體的下載速度,則為httpd.conf檔案增加以下內容
<Directory /home/www/thinkjam/download/soft>
BandWidth thinkjam.org 0 #來自thinkjam.org的下載不受速度限制
BandWidth 210.51.21 0 #來自210.51.21網段的下載不受速度限制
BandWidth all 327680 #來自其它網段的速度都限制為327680Byte,即30KB/s
</Directory>
設定完畢後,重新啟動Apache服務,即可生效。
mod_bandwidth還有許多其它有用的參數,如在中間加上MaxConnection 120則可以限制某個目錄的最多串連數,當超過指定串連數時,拒絕新的串連,此參數與mod_limitipconn模組結合可以控制某個目錄的最多串連人數。
其它的參數請朋友們到其官方網站 http://www.cohprog.com/v3/bandwidth/doc-en.html 察看相關的文檔。
Apache的功能確實強大,很多功能都可以通過添加模組來實現,在 http://modules.apache.org/ 可以找到更多的模組,我們也可以編寫自己的模組來實現相應的功能。