江湖博客

青春是一个充满活力的季节,即便是我们失去了天使的翅膀,只要我们还有一颗青春的心,那么我们的生活依然能够如阳光般灿烂!......
现在位置:首页 > 服务器 > Linux > Apache限制IP并发数和流量控制的方法

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

very168    Linux    2016-2-16    972    0评论

本文章来总结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   
<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             #192.168.1.5最大连接数为5 
测试:
使用mod_bw.so模块前:
bw_limit.jpg

使用mod_bw.so模块后:
bw_limit2.jpg


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

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 


评论一下分享本文赞助博瑞

赞助博瑞X

扫码赞助博瑞
联系站长
江湖博客
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论