• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • Apache限制IP并发数和流量控制的方法

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2018年11月23日 10:40:37
  • 所属分类:Linux
  • 阅读次数:3948次阅读
  • 标签:
  • 本文章来给各位同学总结一下APACHE中限制IP连接数与IP并发数和流量控制实现方法,如果只限制连接数据我们可以直接使用limit,如果要限制其它的需要使用其它第三方模块了

    使用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
                   
      
    <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的并发数进行控制,也可以对下载流量进行控制,也可以对某个目录的流量进行控制。
    安装:

    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
                   
      
    <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:

    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时出现错误:

    [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 就可以:

    #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这个包,如果没有需要安装

    rpm -qa|grep httpd
                   
    yum -y install httpd-devel
                   

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!