「实践ok」apache限速和限制IP连接数的模块---防刷积分,刷邀请好友。外加nginx同类插件:限制IP连接数,限速。

jackxiang 2011-6-5 09:37 | |
安装mod_bw 和 mod_limitipconn 都非常简单。
1、下载:
      wget http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz
      wget http://bwmod.sourceforge.net/files/mod_bw-0.7.tgz
2.安装
#tar -zxvf mod_limitipconn-0.22.tar.gz
#cd mod_limitipconn-0.22
#vi Makefile
修改:apxs = “/usr/local/apache2/bin/apxs” # 这里是自己apache的apxs路径,加载模块
或者
#/usr/local/apache2/bin/apxs -i -c -a mod_limitipconn.c  来加载模块
#make
#make install
#tar -xvf mod_bw-0.7.tgz
#cd mod_bw
#/usr/local/apache2/bin/apxs -i -c -a /home/kenami/mod_bw/mod_bw.c
下面用vi打开apache 的配置文件 httpd.conf
发现了以下两行:
LoadModule limitipconn_module modules/mod_limitipconn.so
LoadModule bw_module          modules/mod_bw.so
说明这两个模块安装成功
以下在httpd.conf 配置这两个模块,我的配置如下:
<IfModule mod_limitipconn.c>
    <Location /home/bo@znche.com/attachments/month_*> #需要控制的路径
        MaxConnPerIP 3 #限制的线程数
        NoIPLimit index.htm #对此文件不做限制
    </Location>
</IfModule>
在论坛的虚拟主机配置文件下面加上:
    BandwidthModule On  
    ForceBandWidthModule On
    Bandwidth all 10000 #限速10K
    MinBandwidth all -1
测试了一下,一切正常,下载mp3的速度限制在10K一下,这样就再也不用担心大量的下载链接导致apache当机的问题了,当然以上方法不能阻止攻击。


=====================
使用mod_limitipconn模块为apache提供并发连接数控制

2007-09-29 kenthy#qingdaonews.com

##################################################################################
系统环境:Red Hat Enterprise Linux Server release 5 (kernel 2.6.18-8.el5xen)
软件环境:
    httpd-2.2.6.tar.bz2
    mod_limitipconn-0.22.tar.gz

    ——参考下载地址:
    http://apache.mirror.phpchina.com/httpd/httpd-2.2.6.tar.bz2
    http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz

目标功能:
    通过增加扩展模块的方式,为apache服务器提供并发连接数控制

##################################################################################
一、安装httpd及mod_limitipconn模块
  # tar jxvf httpd-2.2.6.tar.bz2 -C /usr/src/
  # tar zxvf mod_limitipconn-0.22.tar.gz -C /usr/src/
  # cd /usr/src/httpd-2.2.6
  # patch -p1 < ../mod_limitipconn-0.22/apachesrc.diff
  # ./configure --enable-so --enable-forward     //如需更多特性请参考“./configure --help”
  # ./buildconf
  # make && make install
  # cd /usr/src/mod_limitipconn-0.22
  # PATH=/usr/local/apache2/bin:$PATH make install

二、增加并发连接数控制
  # vi /usr/local/apache2/conf/httpd.conf
LoadModule status_module modules/mod_status.so
LoadModule limitipconn_module modules/mod_limitipconn.so
ExtendedStatus On
CustomLog /var/log/httpd/access_log common env=!LIMITIP
<IfModule mod_limitipconn.c>
    <LocationMatch ~ "\.mp3$">     //匹配.mp3后缀的URL
        MaxConnPerIP 2
    </LocationMatch>
    <LocationMatch ~ "^http://">     //基于正则表达式的方式根据URL进行限制,此处匹配所有以"http://"的URL,忽略大小写
        MaxConnPerIP 10
        NoIPLimit image/*      //对图片不做限制
        OnlyIPLimit audio/mpeg video    //仅对音频、视频等进行限制
    </LocationMatch>
</IfModule>
Proxy client tracking      //此行用于检测代理服务器后的客户端IP地址

四、测试
… …
… …
===

apache
要使apache服务器做对同一IP地址的连接限制,需要mod_limitipconn来实现。一般需要手动编译。不过模块作者也提供了一些编译好的模块,根据自己的apache版本可以直接使用。
1。编译方式:
tar zxvf mod_limitipconn-0.XX.tar.gz
cd mod_limitipconn-0.XX
make apxs=/usr/local/apache/bin/apxs —–这里要按你自己的路径设置
make install apxs=/usr/local/apache/bin/apxs —–这里要按你自己的路径设置
2.rpm安装方式:
直接下载mod_limitipconn-0.xx.rpm
rpm -Uhv mod_limitipconn-0.xx.rpm
然后确认产生的mod_limitipconn.so文件在apache服务器模块目录里。
3。编辑httpd.conf文件:
ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.so < 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>
nginx
nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量
1.添加limit_zone
这个变量只能在http使用
vi /usr/local/nginx/conf/nginx.conf
limit_zone one $binary_remote_addr 10m;
2.添加limit_conn
这个变量可以在http, server, location使用
我只限制一个站点,所以添加到server里面
vi /usr/local/nginx/conf/host/gaojinbo.com.conf
limit_conn one 10;
3.重启nginx
killall nginx -HUP
vi /usr/local/nginx/conf/vhosts/down.redocn.com.conf
limit_zone one $binary_remote_addr 10m;
server
{
listen 80;
server_name down.redocn.com;
index index.html index.htm index.php;
root /data/www/wwwroot/down;
error_page 404 /index.php;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#Zone limit
location / {
limit_conn one 1;
limit_rate 20k;//限速
}
# serve static files
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /data/www/wwwroot/down;
expires 30d;
}
}




来源:http://blogold.chinaunix.net/u1/40349/showart_392704.html
Nginx参考自:http://www.cnblogs.com/amityat/archive/2011/08/23/2150168.html

Nginx进行限速处理
限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置
首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子

http {
limit_zone one $binary_remote_addr 10m;
server {
location /files/ {
limit_conn one 1;
limit_rate 20k;
}
}
}
说明:
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。

limit_conn one 1;
限制在one中记录状态的每个IP只能发起一个并发连接。

limit_rate 20k;
对每个连接限速20k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。

----------

官方参考:http://wiki.nginx.org/NginxHttpLimitZoneModule

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4342/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2012-6-13 11:29
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]