我们致力于一个Apache知识的分享网站

Home » Apache初级应用 » 在Apache下限制每个虚拟主机的并发数

在Apache下限制每个虚拟主机的并发数


2009-02-07 20:32:45  |   才被看了2,283次  |   要评论?
分类: Apache初级应用  |   发布:   |   来源:Penner Blog

Tags: ,

下载模块:http://www.nowhere-land.org/programs/mod_vhost_limit/

安装:

  1. apxs -c mod_vhost_limit.c -o /path/to/libexec/mod_vhost_limit.so

在 httpd.conf 加入:

  1. LoadModule vhost_limit_module libexec/mod_vhost_limit.so
  2. AddModule mod_vhost_limit.c

配置:

  1. MaxClients 150
  2. ExtendedStatus On
  3.  
  4. NameVirtualHost *
  5. <VirtualHost *>
  6.     ServerName server1
  7.     DocumentRoot /some/where/1
  8.     MaxVhostClients 100
  9. </VirtualHost>
  10.  
  11. <VirtualHost *>
  12.     ServerName server2
  13.     DocumentRoot /some/where/2
  14.     MaxVhostClients 30
  15. </VirtualHost>
  16.  
  17. <VirtualHost *>
  18.     ServerName server3
  19.     DocumentRoot /some/where/3
  20. </VirtualHost>

其中:server1 被限制为 100 个并发线程数。server2 被限制为 30 个并发线程数。server3 没有被限制。
注:需 mod_status 的 ExtendedStatus On 支持!!

如超出限制的并发数在客户端就会出现503错误:
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
——————————————————————————–

Apache/1.3.27 Server at server1 Port 80

在 error_log 中将会有类似以下的错误提示:
[Mon Jun 23 15:22:24 2003] [error] client access to server1 deferred, MaxVhostClients 100 exceeded
——————————————————————————–

下载 mod_limitipconn.c
http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz
http://dominia.org/djao/limit/mod_limitipconn-0.04-1.i386.rpm
(proxy client detection feature not enabled)
http://dominia.org/djao/limit/mod_limitipconn-0.04-1.src.rpm
我用的是tar包下载的是mod_limitipconn-0.04.tar.gz,(该模块已经可以支持apache2)在服务器上执行# wget http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz 下载到本地,然后执行下面的命令编译安装。我的apache位于/usr/local/apache目录

解压缩:

  1. [root@ns chenlf]# tar zxvf mod_limitipconn-0.04.tar.gz
  2. mod_limitipconn-0.04/
  3. mod_limitipconn-0.04/Makefile
  4. mod_limitipconn-0.04/README
  5. mod_limitipconn-0.04/apachesrc.diff
  6. mod_limitipconn-0.04/mod_limitipconn.c
  7. mod_limitipconn-0.04/ChangeLog

编译安装:

  1. [root@ns chenlf]# cd mod_limitipconn-0.04
  2. [root@ns mod_limitipconn-0.04]# ls
  3. apachesrc.diff     ChangeLog     Makefile
  4. mod_limitipconn.c  README
  5. [root@ns mod_limitipconn-0.04]
  6. # /usr/local/apache/bin/apxs -c -i -a mod_limitipconn.c
  7. gcc -DLINUX=22 -I/usr/include/db1 -fpic -DSHARED_MODULE -I
  8. /usr/local/apache/include -c mod_limitipconn.c
  9. gcc -shared -o mod_limitipconn.so mod_limitipconn.o
  10. [activating module `limitipconn’ in /usr/local/apache/conf/httpd.conf]
  11. cp mod_limitipconn.so
  12. /usr/local/apache/libexec/mod_limitipconn.so
  13. chmod 755 /usr/local/apache/libexec/mod_limitipconn.so
  14. cp /usr/local/apache/conf/httpd.conf
  15.     /usr/local/apache/conf/httpd.conf.bak
  16. cp /usr/local/apache/conf/httpd.conf.new
  17.     /usr/local/apache/conf/httpd.conf
  18. rm /usr/local/apache/conf/httpd.conf.new

修改配置文件:

  1. 全局控制,在httpd.conf加上以下几行:
    1. <IfModule mod_limitipconn.c>
    2.     <Location /> # 所有虚拟主机的/目录
    3.         MaxConnPerIP 3 # 每IP只允许3个并发连接
    4.         NoIPLimit image/* # 对图片不做IP限制
    5.     </Location>
    6.     <Location /mp3> # 所有主机的/mp3目录
    7.         MaxConnPerIP 1 # 每IP只允许一个连接请求
    8.         OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
    9.     </Location>
    10. </IfModule>
  2. 局部限制,你也可以在虚拟主机的配置文件里设置IP限制,方法是完全一样:
    1. <VirtualHost xx.xxx.xx.xx>
    2.     ServerAdmin chenlf@chinalinuxpub.com
    3.     DocumentRoot /home/my
    4.     ServerName www.my.com
    5.     <IfModule mod_limitipconn.c>
    6.         <Location /> # 所有虚拟主机的/目录
    7.             MaxConnPerIP 5 # 每IP只允许3个并发连接
    8.             NoIPLimit image/* # 对图片不做IP限制
    9.         </Location>
    10.         <Location /mp3> # 所有主机的/mp3目录
    11.             MaxConnPerIP 2 # 每IP只允许一个连接请求
    12.             OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
    13.         </Location>
    14.     </IfModule>
    15.     ErrorLog /home/my/logs/error_log
    16.     CustomLog /home/my/logs/access_log common
    17. </VirtualHost>
  3. 此外必须将 apache 的 ExtendedStatus 设置为ON。
    在httpd.conf找到 # ExtendedStatus On 去掉前面的注释即可。

好了,全部配置结束,重起apache就可以生效了。

Apache PHP利用HTTP缓存协议原理解析及应用 使用gzip压缩来压缩网页之apache的相关配置

Leave a Reply