您的位置:博客首页 >> Web服务器 >> [Nginx]HttpLimitZoneModule并发连接限制模块

[Nginx]HttpLimitZoneModule并发连接限制模块

日志编号:92 发表时间: 2012-03-19 23:04:45 关注次数:5801
HttpLimitZoneModule并发连接限制模块介绍:http://wiki.nginx.org/NginxChsHttpLimit_zoneModule
本文并不是想着重介绍HttpLimitZoneModule的作用及如何使用。
关于使用,简单说下:
http块加入:limit_zone   fdos  $binary_remote_addr  10m;
每一个server块都可加入:limit_conn   fdos  2;

如上设置,将会是什么个情况呢?假如你有一相册程序,或者你创建一个php文件:
以下为代码内容,请直接复制粘贴:
<?php
for ($i=1;$i<=50;$i++) {
    echo "<img src=\"$i.jpg\">";
}

?>
并在目录下有1.jpg、2.jpg、3.jpg……等图片,那么你访问这个php文件,就会发现访问时只能显示2张图片,其他图片都404了(红XX,其实是503),再刷新一下会显示4张,或者6张。显示4张是因为先前2张图片被expires缓存下来不需要去服务器获取了。如果显示6张,则说明你这次多的4张图片,它们是分两拨显示的,2*2并发,也可以理解为网速慢。^_^。

    这样你就从脑袋印象中了解了什么叫HttpLimitZoneModule的每个IP的并发连接数。并发连接数和IIS的连接数有很大的区别。

    因此说,对于很多应用,范例中将并发连接数设置为1、2是错误的,应该适当增加此值。具体可通过刷新页面观察各图片(包括gif等背景图片,可见CSS Sprites是多么重要了)、css是否加载并适当增加允许并发连接数。推荐设置为10-20。

    不过,大部分服务器都不用这个模块。用它防Ddos还是弱了点。而且Nginx本身应对Ddos的能力就比较强。

    对于有大量图片的网站,可以使用lazyload来避免同一IP并发连接数过大的问题:http://baike.baidu.com/view/3224592.htm

http {
  limit_zone   one  $binary_remote_addr  10m;
  server {
    location /download/ {
      limit_conn   one  2; //每IP俩线程
      limit_rate 20k; //每线程20k,也就是每IP最高可以有40K的下载速度。当然,得多线程下载。
    }
  }
}

更新:
从1.1.18开始,这个模块更新问ngx_http_limit_conn_module(或者说由ngx_http_limit_conn_module代替HttpLimitZoneModule),功能也强大很多。设置如下:

limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    ...
    limit_conn addr 1; //同时下载数?不是很懂。发现设置为1,访问网页时css和图片正常,但只能下载一个文件,第2个文件下载就503。为了防止误设,我在服务器上设置为2
    limit_conn perip 10; //连接数限制,和本文上方旧版的一样,设置太小会影响网页中的图片和CSS。我服务器上设置为15,10的话也够用。
    limit_conn perserver 100;//这个服务器上没设置
}
本站不提供讨论功能。
本站所有非新闻类文章均为原创,且禁止转载。
本站为了获得更多流量赚取广告费,难免会有以次充好的文章,望见谅,勿鄙视。