利用Limit模块限制IP连接数
系统版本:centos6.3
APACHE版本:apache2.42(编译安装)
1.配置Limit模块
#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
#vi Makefile
找到APXS这行,改成
APXS=/usr/local/apache2/bin/apxs
#make && make install
全局变量范例:
< IfModule mod_limitipconn.c >
< Location / > # 所有虚拟主机的/目录
MaxConnPerIP 3 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
< /Location >
< Location /mp3 > # 所有主机的/mp3目录
MaxConnPerIP 1 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
# vi /usr/local/apache2/conf/httpd.conf
--------------------
ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.so
MaxConnPerIP 6
NoIPLimit image/*
-------------------
2、配置webbench对网站进行压力测试:
#wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
#tar zxvf webbench-1.5.tar.gz
#cd webbench-1.5
#make && make install
3、使用:
webbench -c 500 -t 30 http://127.0.0.1/
参数说明:-c表示并发数,-t表示时间(秒)
4、测试结果示例:
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://127.0.0.1/
500 clients, running 30 sec.
Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.
Apache限制一个IP的连接数
Apache最大的优点在于它是个模块化的程序,缺乏什么样的功能就可以单独开发相应的功能模块,然
后加到Apache上就可以了,项目中一个客户的平台上资源较多,很多人都用多线程下载工具下载,导致
服务器负载很大,于是便想到了限制IP的连接数,如果Apache是1.x版本的,那么从
http://dominia.org/djao/limitipconn.html 这里下载对应的Linux版本的(windows的没有),如果是
2.x版本的,那么从http://dominia.org/djao/limitipconn2.html下载Linux的或者Windows的,如果用
在Linux上,那么安装方法上面写的很清楚,如果是windows的,把下载的release目录下的
mod_limitipconn.dll放到Apache的安装目录的modules目录下;
然后修改Apache的配置文件httpd.conf,这里不管Linux还是Windows都是一样的,如果是2.0首先找到
httpd.conf中的LoadModule status_module modules/mod_status.so,把这句话前面的#去掉,然后加入
如下内容
ExtendedStatus On
LoadModule limitipconn_module modulesmod_limitipconn.dll
MaxConnPerIP 3
# exempting images from the connection limit is often a good
# idea if your web page has lots of inline images, since these
# pages often generate a flurry of concurrent image requests
NoIPLimit image/*
里面/resource是制定限定IP的目录,然后MaxConnPerIP是限定每个IP的并发连接数,NoIPLimit
image/* 是排除resource下不限定的目录。
Apache限制IP并发数和流量控制
使用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/* #对图片不做限制
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