本文章來給各位同學總結一下APACHE中限制IP連接數與IP并發數和流量控制實現方法,如果只限制連接數據我們可以直接使用limit,如果要限制其它的需要使用其它第三方模塊了。
利用Limit模塊限制IP連接數
系統版本:centos6.3,APACHE版本:apache2.42(編譯安裝)
1.配置Limit模塊
#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
- #vi Makefile
找到APXS這行,改成
- APXS=/usr/local/apache2/bin/apxs
- #make && make install
全局變量范例:
- < IfModule mod_limitipconn.c >
- < Location / > # 所有虛擬主機的/目錄
- MaxConnPerIP 3 # 每IP只允許3個并發連接
- NoIPLimit image/* # 對圖片不做IP限制
- < /Location >
- < Location /mp3 > # 所有主機的/mp3目錄
- MaxConnPerIP 1 # 每IP只允許一個連接請求
- OnlyIPLimit audio/mpeg video # 該限制只對視頻和音頻格式的文件
- < /Location >
- < /IfModule >
- # vi /usr/local/apache2/conf/httpd.conf
- --------------------
- ExtendedStatus On
- LoadModule limitipconn_module modules/mod_limitipconn.so
- <IfModule mod_limitipconn.c>
- <Location />
- MaxConnPerIP 6
- NoIPLimit image/*
- </Location>
- </IfModule>
- -------------------
2、配置webbench對網站進行壓力測試:
- #wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
- #tar zxvf webbench-1.5.tar.gz
- #cd webbench-1.5
- #make && make install
3、使用:
webbench -c 500 -t 30 http://127.0.0.1/
參數說明:-c表示并發數,-t表示時間(秒)
4、測試結果示例:
- Webbench - Simple Web Benchmark 1.5
- Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
- Benchmarking: GET http://127.0.0.1/
- 500 clients, running 30 sec.
- Speed=3230 pages/min, 11614212 bytes/sec.
- Requests: 1615 susceed, 0 failed.
Apache限制一個IP的連接數
Apache最大的優點在于它是個模塊化的程序,缺乏什么樣的功能就可以單獨開發相應的功能模塊,然后加到Apache上就可以了,項目中一個客戶的平臺上資源較多,很多人都用多線程下載工具下載,導致服務器負載很大,于是便想到了限制IP的連接數,如果Apache是1.x版本的,那么從http://dominia.org/djao/limitipconn.html 這里下載對應的Linux版本的(windows的沒有),如果是2.x版本的,那么從http://dominia.org/djao/limitipconn2.html下載Linux的或者Windows的,如果用在Linux上,那么安裝方法上面寫的很清楚,如果是windows的,把下載的release目錄下的mod_limitipconn.dll放到Apache的安裝目錄的modules目錄下;
然后修改Apache的配置文件httpd.conf,這里不管Linux還是Windows都是一樣的,如果是2.0首先找到 httpd.conf 中的 LoadModule status_module modules/mod_status.so,把這句話前面的#去掉,然后加入如下內容:
- ExtendedStatus On
- LoadModule limitipconn_module modulesmod_limitipconn.dll
- <IfModule mod_limitipconn.c>
- <Location /resource>
- MaxConnPerIP 3
- # exempting images from the connection limit is often a good
- # idea if your web page has lots of inline images, since these
- # pages often generate a flurry of concurrent image requests
- NoIPLimit image/*
- </Location>
- </IfModule>
里面/resource是制定限定IP的目錄,然后MaxConnPerIP是限定每個IP的并發連接數,NoIPLimit image/* 是排除resource下不限定的目錄。
Apache限制IP并發數和流量控制
使用mod_limitipconn模塊限制IP并發連接數,安裝:
- 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
- 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配置文件:
- 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:
- 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
新聞熱點
疑難解答