zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

2023-06-13 09:15:31 时间

本文章来给各位同学总结一下APACHE中限制IP连接数与IP并发数和流量控制实现方法,如果只限制连接数据我们可以直接使用limit,如果要限制其它的需要使用其它第三方模块了

使用mod_limitipconn模块限制IP并发连接数
安装:

wgethttp://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2
tarjxvfmod_limitipconn-0.24.tar.bz2
cdmod_limitipconn-0.24
/usr/local/apache2/bin/apxs-c-imod_limitipconn.c

编辑httpd.conf

ExtendedStatusOn
LoadModulelimitipconn_modulemodules/mod_limitipconn.so

<ifModulemod_limitipconn.c>
<location/>#对应根目录
MaxConnPerIP5#最大并发数为5
NoIPLimitimage/*#对图片不做限制
</location>
<location/test>#对根目录下的test目录做限制
MaxConnPerIP2#最大并发数为2
</location>
</ifModule>

如果想限制虚拟主机的ip并发连接数,可以修改extra/httpd-vhost.conf把IfModulemod_limitipconn.c这一段复制到Virtualhost中就可以了。

测试:
测试很简单,把最大连接数调小一点,随便一个浏览器访问页面,然后按着F5,让页面不断刷新,一下就可以弹出503错误

使用mod_bandwidth模块限制带宽
mod_bandwidth可以对IP的并发数进行控制,也可以对下载流量进行控制,也可以对某个目录的流量进行控制。
安装:

wgethttp://bwmod.sourceforge.net/files/mod_bw-0.7.tgz
tarzxvfmod_bw-0.7.tgz
cdmod_bw
/usr/local/apache2/bin/apxs-c-imod_bw.c

编辑httpd.conf配置文件:

LoadModulebw_modulemodules/mod_bw.so

<virtualHost*:80>
ServerNamevhost1.cszhi.com
DocumentRoot/var/www/vhost1
BandwidthModuleOn
ForceBandWidthModuleOn
Bandwidthall1024000
MinBandwidthall50000#每个客户端最高速度可达50KB
LargeFileLimit*50050000
MaxConnectionall6
</virtualHost>

其它参数事例说明,详细的见源码包里的mod_bw.txt:

BandWidthlocalhost0#对localhost不限速
BandWidth192.168.1.5102400#对192.168.1.5限速为100KB
BandWidth“u:^Mozilla(.*)”10240#用mozilla时限速10KB
BandWidth“u:wget”102400#如果用wget下载时限速10KB
MinBandWidthall-1#保证每个客户端最高速度可达10KB
LargeFileLimit.jpg10010240#jpg文件超过100KB,限速10KB
#下面的510挺好,如果不设置,apache自己会报错,就根报404差不多,页面非常的丑
ErrorDocument510/exceed_speed.html
BandWidthError510
MaxConnectionall10#所有ip最大连接数为10
MaxConnection192.168.1.55#192.168.1.5最大连接数为5

测试:
使用mod_bw.so模块前:

使用mod_bw.so模块后:

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

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

[root@vpshttpd]#/etc/init.d/httpdrestart
Stoppinghttpd:[FAILED]
Startinghttpd:httpd:Syntaxerroronline203of/etc/httpd/conf/httpd.conf:Cannotload/etc/httpd/modules/mod_bw.sointoserver:/etc/httpd/modules/mod_bw.so:undefinedsymbol:apr_atomic_cas
[FAILED]

修改一下mod_bw.c就可以:

#ifdefAPR_MAJOR_VERSION//添加这行
#if(APR_MAJOR_VERSION<1)
#defineapr_atomic_inc32apr_atomic_inc
#defineapr_atomic_dec32apr_atomic_dec
#defineapr_atomic_add32apr_atomic_add
#defineapr_atomic_cas32apr_atomic_cas
#defineapr_atomic_set32apr_atomic_set
#endif
#endif//添加这行

重新编译:

/usr/local/apache2/bin/apxs-c-imod_bw.c

2、如果服务器没有安装apxs,可以参照以下方法安装:


apxs是一个为ApacheHTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。

输入命令查看是否有httpd-devel这个包,如果没有需要安装

rpm-qa|grephttpd
yum-yinstallhttpd-devel