apache限制同一ip大並發訪問及下載


內容來自以下網站整理

http://www.jb51.net/article/58060.htm
http://www.2cto.com/os/201202/120665.html
http://blog.csdn.net/lipei1220/article/details/39293851

測試時請用瀏覽器下載來測試,不用bt之類下載

如果只限制連接數據我們可以直接使用limit,如果要限制其它的需要使用其它第三方模塊了

使用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 #指定apxs的正確路徑

編輯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中就可以了。

使用mod_bandwidth模塊限制帶寬

mod_bandwidth可以對IP的並發數進行控制,也可以對下載流量進行控制,也可以對某個目錄的流量進行控制。

下載及安裝:

wget http://ivn.cl/files/source/mod_bw-0.92.tgz
tar zxvf mod_bw-0.92.tgz
/usr/local/apache2/bin/apxs -c -i -a mod_bw.c

apache2.4.x報錯:

/mnt/vdd/mod_bw.c: In function 'get_bw_rate':
/mnt/vdd/mod_bw.c:567:59: error: 'conn_rec' has no member named 'remote_addr'
if (apr_ipsubnet_test(e[i].x.ip, r->connection->remote_addr)) {

這個錯誤是由於apache2.2 到2.4 api有所改變,詳細如下:

http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html

解決辦法:

vim mod_bw.c

把所有的remote_ip和remote_addr分別替換成client_ip和client_addr

重新執行 /usr/local/apache2/bin/apxs -i -c -a mod_bw.c

編輯httpd.conf配置文件

復制代碼
LoadModule bw_module modules/mod_bw.so
  
<virtualHost *:80>
    ServerName xxxxx
    DocumentRoot  /xxxx
    BandwidthModule On
    ForceBandWidthModule On
    Bandwidth all 20000 # 20 KB
</virtualHost>
 
復制代碼

其它參數事例說明,詳細的見源碼包里的mod_bw.txt:

當測試時,用瀏覽器的下載器,不要用迅雷之類的來測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM