本文章來給各位同學總結一下apache中限制ip連接數與ip并發數和流量控制實現方法,如果只限制連接數據我們可以直接使用limit,如果要限制其它的需要使用其它第三方模塊了
使用mod_limitipconn模塊限制ip并發連接數
安裝:
1
2
3
4
|
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.conf
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的并發數進行控制,也可以對下載流量進行控制,也可以對某個目錄的流量進行控制。
安裝:
1
2
3
4
|
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配置文件:
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模塊后:
安裝過程中可能出現的問題:
1、添加完mod_bw.so模塊,重啟apache時出現錯誤:
1
2
3
4
|
[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
2、如果服務器沒有安裝apxs,可以參照以下方法安裝:
apxs是一個為apache http服務器編譯和安裝擴展模塊的工具,用于編譯一個或多個源程序或目標代碼文件為動態共享對象,使之可以用由mod_so提供的loadmodule指令在運行時加載到apache服務器中。
輸入命令查看是否有httpd-devel這個包,如果沒有需要安裝
1
2
|
rpm -qa|grep httpd yum -y install httpd-devel |