上一篇日志中针对apache的下载限速做了介绍。本篇承接上篇对nginx的下载限速做一个总结及对比。Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个模块来实现对目录和IP进行下载限速。

先来一个配置示例看下:

 1limit_zone one $binary_remote_addr 10m;
 2server {
 3    listen       80;
 4    server_name  test.361way.com;
 5    location / {
 6    root   /var/www/html;
 7    index  index.html index.htm index.php;
 8    autoindex on;
 9    autoindex_exact_size off;
10    autoindex_localtime on;
11    limit_conn one 2;
12    limit_rate 10k;
13}

该配置中分了两部分。上面一部分用到了模块HTTPLimitZoneModule的用法。上面的配置中定义了一个名字为one大小为10M的容器,用于存储每个IP的session状态。该容器的大小要求大于等于32K,即每个session的大小为大于等于32k。按本例中10M大小来算,可以处理320000个session 。

配置完该容器后,HTTPLimitZoneModule模块下还有另外一个参数limit_conn,配合limit_zone参数使用。如本例中,指定了one容器中,限制每个IP只能发起来两个连接。HTTPLimitZoneModule模块的详细用法可以参看其官方wiki页面。本示例中的配置是只针对根目录的。如果要对其他目录设置,改为其应的location /path 即可。

下面接着看第二部分,即HTTPCoreModule模块部分。该模块所该的参数比较多。但对于速度方面的限制主要为limit_rate参数。该参数用于限制每个连接的速度大小。本例中限制每个连接的最大下限速度为10k/s 。不过本例中对于每个IP的下载速度的峰值是多大呢?

很简间,单个IP的最大连接为2,每个连接的最大速度为10k,每个IP的最大速度即为:10k * 2 = 20k/s 。HTTPCoreModule模块的其他用法,也可以参看该模块的官方wiki

总结:

nginx以按默认方式编译安装的话自动会带以上两个模块的,不像apache需要通过编译时指定或动态加载第三方模块。从配置上来看,nginx的配置比较比较简洁,但功能上不如apache的mod_bw模块丰富。