linux限制ip流量,Apache限制IP并发数和流量控制的方法

本文章来给各位同学总结一下APACHE中限制IP连接数与IP并发数和流量控制实现方法,如果只限制连接数据我们可以直接使用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

编辑httpd.conf

ExtendedStatus On

LoadModule limitipconn_module modules/mod_limitipconn.so

#对应根目录

MaxConnPerIP 5 #最大并发数为5

NoIPLimit image/* #对图片不做限制

#对根目录下的test目录做限制

MaxConnPerIP 2 #最大并发数为2

如果想限制虚拟主机的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

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

其它参数事例说明,详细的见源码包里的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 #192.168.1.5最大连接数为5

测试:

使用mod_bw.so模块前:

b981909930210c09754dd953b535622a.png

使用mod_bw.so模块后:

c6f4c70e6873e2a54ed29caad8f0d5b6.png

安装过程中可能出现的问题:

1、添加完mod_bw.so模块,重启apache时出现错误:

[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 就可以:

#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这个包,如果没有需要安装

rpm -qa|grep httpd

yum -y install httpd-devel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值