本文章来给各位同学总结一下apache中限制ip连接数与ip并发数和流量控制实现方法,如果只限制连接数据我们可以直接使用limit,如果要限制其它的需要使用其它第三方模块了
使用mod_limitipconn模块限制ip并发连接数
安装:
?
1
2
3
4
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
?
1
2
3
4
5
6
7
8
9
10
11
12
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的并发数进行控制,也可以对下载流量进行控制,也可以对某个目录的流量进行控制。
安装:
?
1
2
3
4
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配置文件:
?
1
2
3
4
5
6
7
8
9
10
11
12
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:
?
1
2
3
4
5
6
7
8
9
10
11
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模块前:
使用mod_bw.so模块后:
安装过程中可能出现的问题:
1、添加完mod_bw.so模块,重启apache时出现错误:
?
1
2
3
4
[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 就可以:
?
1
2
3
4
5
6
7
8
9
#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这个包,如果没有需要安装
?
1
2
rpm -qa|grep httpd
yum -y install httpd-devel
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。