内容来自以下网站整理
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:
当测试时,用浏览器的下载器,不要用迅雷之类的来测试