使用mod_limitipconn模塊限制IP併發鏈接數
安裝:html
wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 tar jxvf mod_limitipconn-0.24.tar.bz2 cd mod_limitipconn-0.24 /usr/local/apache2/bin/apxs -c -i mod_limitipconn.c
編輯httpd.confapache
1 2 3 4 5 6 7 8 9 10 11 12 |
ExtendedStatus On LoadModule limitipconn_module modules/mod_limitipconn.so #將路徑修改成安裝後的路徑,保存時去掉如下代碼的註釋 <ifModule mod_limitipconn.c> <location /> #對應根目錄 MaxConnPerIP 5 #最大併發數爲5 NoIPLimit image/* #對圖片不作限制 </location> <location /test> #對根目錄下的test目錄作限制 MaxConnPerIP 2 #最大併發數爲2 </location> </ifModule> |
若是想限制虛擬主機的ip併發鏈接數,能夠修改extra/httpd-vhost.conf把 IfModule mod_limitipconn.c 這一段複製到Virtualhost中就能夠了。瀏覽器
測試:
測試很簡單,把最大鏈接數調小一點,隨便一個瀏覽器訪問頁面,而後按着F5,讓頁面不斷刷新,一下就能夠彈出503錯誤服務器
使用mod_bandwidth模塊限制帶寬
mod_bandwidth能夠對IP的併發數進行控制,也能夠對下載流量進行控制,也能夠對某個目錄的流量進行控制。
安裝:併發
wget http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz tar zxvf mod_bw-0.7.tgz cd mod_bw /usr/local/apache2/bin/apxs -c -i mod_bw.c
編輯httpd.conf配置文件:dom
1 2 3 4 5 6 7 8 9 10 11 12 |
LoadModule bw_module modules/mod_bw.so <virtualHost *:80> ServerName vhost1.cszhi.com DocumentRoot /var/www/vhost1 BandwidthModule On ForceBandWidthModule On Bandwidth all 1024000 MinBandwidth all 50000 #每一個客戶端最高速度可達50KB LargeFileLimit * 500 50000 MaxConnection all 6 </virtualHost> |
其它參數事例說明,詳細的見源碼包裏的mod_bw.txt:工具
1 2 3 4 5 6 7 8 9 10 11 |
BandWidth localhost 0 #對localhost不限速 BandWidth 192.168.1.5 102400 #對192.168.1.5限速爲100KB BandWidth 「u:^Mozilla(.*)」 10240 #用mozilla時限速10KB BandWidth 「u:wget」 102400 #若是用wget下載時限速10KB MinBandWidth all -1 #保證每一個客戶端最高速度可達10KB LargeFileLimit .jpg 100 10240 #jpg文件超過100KB,限速10KB #下面的510挺好,若是不設置,apache本身會報錯,就根報404差很少,頁面很是的醜 ErrorDocument 510 /exceed_speed.html BandWidthError 510 MaxConnection all 10 #全部ip最大鏈接數爲10 MaxConnection 192.168.1.5 5 #192.168.1.5最大鏈接數爲5 |
測試:
使用mod_bw.so模塊前:
使用mod_bw.so模塊後:測試
安裝過程當中可能出現的問題:atom
一、添加完mod_bw.so模塊,重啓apache時出現錯誤:.net
[root@vps httpd]# /etc/init.d/httpd restart Stopping httpd: [FAILED] Starting httpd: httpd: Syntax error on line 203 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_bw.so into server: /etc/httpd/modules/mod_bw.so: undefined symbol: apr_atomic_cas [FAILED]
修改一下mod_bw.c 就能夠:
1 2 3 4 5 6 7 8 9 |
#ifdef APR_MAJOR_VERSION //添加這行 #if (APR_MAJOR_VERSION < 1) #define apr_atomic_inc32 apr_atomic_inc #define apr_atomic_dec32 apr_atomic_dec #define apr_atomic_add32 apr_atomic_add #define apr_atomic_cas32 apr_atomic_cas #define apr_atomic_set32 apr_atomic_set #endif #endif //添加這行 |
從新編譯:
/usr/local/apache2/bin/apxs -c -i mod_bw.c
二、若是服務器沒有安裝apxs,能夠參照如下方法安裝:
apxs是一個爲Apache HTTP服務器編譯和安裝擴展模塊的工具,用於編譯一個或多個源程序或目標代碼文件爲動態共享對象,使之能夠用由mod_so提供的LoadModule指令在運行時加載到Apache服務器中。
輸入命令查看是否有httpd-devel這個包,若是沒有須要安裝
rpm -qa|grep httpd yum -y install httpd-devel