热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Apache限制IP并发数和流量控制的方法

这篇文章主要介绍了Apache限制IP并发数和流量控制的方法,需要的朋友可以参考下

本文章来给各位同学总结一下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
 

                       #对应根目录
   MaxConnPerIP 5                 #最大并发数为5
   NoIPLimit image/*                #对图片不做限制

                    #对根目录下的test目录做限制
   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             #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

推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
author-avatar
津pig
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有