Linux下apache如何限制并发连接和下载速度

mod_limitipconn,这个是Apache的一个非官方模块,根据同一个来源IP进行并发连接控制,Bw_mod,它可以根据来源IP进行带宽限制,它们都是apache的第三方模块。

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

3.配置

<IfModule mod_limitipconn.c>
    <Location /home/bo@jb51.net/attachments/month _*> #需要控制的路径
        MaxConnPerIP 3 #限制的线程数
        NoIPLimit index.htm #对此文件不做限制
    </Location>
</IfModule>

在虚拟主机配置文件下面加上:

BandwidthModule On 
    ForceBandWidthModule On
    Bandwidth all 10000 #限速10K
    MinBandwidth all -1

配置参数说明如下:
a.  BandWidthModule  On|Off

//是否开启mod_bw的带宽限制功能。

b.  BandWidth  [From]  [bytes/s]

设置指定客户机最大带宽,0表示不限制

BandWidth u:[User-Agent] [bytes/s]

c.  MinBandWidth  [From]  [bytes/s]

设置指定客户机带宽的最小值,为0表示每个客户端带宽最大为256bytes/s,为-1表示最大为BandWith的值

d.  LargeFileLimit  [Type]  [Minimum Size]  [bytes/s]

设置访问超出特定大小的某种文件的最大带宽,文件类型大小单位为kbytes

e.   MaxConnection [From] [Max]

设置指定客户机的最大并发连接数

f.   ForceBandWidthModule [On|Off]

默认bw模块将应用所有请求,On可设置过滤类型

关于From,即客户端来源可分以下几种情况:

IP指定单一主机

192.168.1.22

指定网段

192.168.1.0/24或

192.168.1.0/255.255.255.0

域名单一主机

Client1.jb51.net

域名指定范围

.jb51.net

所有客户端

all

以上配置既可以针对所有客户端,也可以对某个虚拟主机进行配置

实例一:

BandWidthModule On

BandWidth all 307200

BandWidth 192.168.1.2 102400

BandWidth “u:^Mozilla/5(.*)” 102400

BandWidth “u:wget” 204800

ForceBandWidthModule On

LargeFileLimit .avi 600 204800

MaxConnection all 100

MaxConnnection 192.168.1.2 5

以上的配置含义:

开启mod_bw, 限制所有文件类型也开启了

所有客户端最大带宽为300k,最大并发连接为100

192.168.1.2的最大带宽为100k,最大并发连接为5

使用FireFox的客户端最大带宽为100k

使用wget的客户端最大带宽为200k

对超过600k的avi格式的文件最大带宽为200kbyte/s

实例二:

<Virtualhost *>

BandwidthModule On

ForceBandWidthModule On

LargeFileLimit .avi 1 20000

LargeFileLimit .mpg 1 20000

Servername www.jb51.net

</Virtualhost>

该实例对虚拟主机进行了限制,指定的文件类型avi和mpg最大带宽为20K,ForceBandWidthModule On必须有。

实例三:

<Virtualhost *>

BandwidthModule On

AddOutputFilterByType MOD_BW text/html text/plain

Bandwidth all 5000

Servername www.jb51.net

</Virtualhost>

(0)

相关推荐

  • linux shell中 if else以及大于、小于、等于逻辑表达式介绍

    比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格.笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间. if ....; then....elif ....; then....else....fi[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ]

  • Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许当前用户进程打开的文件数限制: [speng@as4 ~]$ ulimit -n 1024 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进

  • linux并发连接50万的配置方法

    - A 64 bits hardware/kernel (AMD64, Opterons)  - At least 8GB of ram  - A recent linux kernel (2.6.x) About tuning, I prefer to not fully disclose them because servers are targets of many attacks, so it's better not help hackers. The most touchy thin

  • Linux netstat命令详细解析

    简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等. 输出信息含义执行netstat后,其输出结果为 复制代码 代码如下: Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 2 2

  • Linux系统(X64)安装Oracle11g完整安装图文教程另附基本操作

    一.修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/limits.conf,按i键进入编辑模式,将下列内容加入该文件. oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 编辑完成后按Esc键,输入":wq"

  • 浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一个进程的子进程可以有多个,并且没有一个函数使一个进程可以获得其所有子进程的进程ID.fork使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用getpid以获得其父进程的进程ID. 使fork失败的两个主要原因是:系统中已经有了太多的进程,或者该实际用户ID的进程总数超过

  • linux中编写自己的并发队列类(Queue 并发阻塞队列)

    设计并发队列 复制代码 代码如下: #include <pthread.h>#include <list>using namespace std; template <typename T>class Queue { public:     Queue( )     {         pthread_mutex_init(&_lock, NULL);     }     ~Queue( )     {         pthread_mutex_destroy

  • linux命令详解之useradd命令使用方法

    Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问:另一方面也可以帮助用户组织文件,并为用户提供安全性保护.每个用户账号都拥有一个惟一的用户名和各自的口令.用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录. 实现用户账号的管理,要完成的工作主要有如下几个方面:用户账号的添加.删除与修改.用户口令的管

  • Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在

  • Linux netstat命令查看并发连接数的方法

    介绍 并发连接数是指防火墙或代理服务器对其业务信息流的处理能力,是防火墙能够同时处理的点对点连接的最大数目,它反映出防火墙设备对多个连接的访问控制能力和连接状态跟踪能力,这个参数的大小直接影响到防火墙所能支持的最大信息点数. 实现方法 使用以下命令即可分组查看各种连接状态哦: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 解释: 返回结果示例: LAST_ACK 5 (正在等待处理的请求数) SYN_RE

随机推荐