上一篇日志中针对apache的下载限速做了介绍。本篇承接上篇对nginx的下载限速做一个总结及对比。Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个模块来实现对目录和IP进行下载限速。
先来一个配置示例看下:
limit_zone one $binary_remote_addr 10m; server { listen 80; server_name test.361way.com; location / { root /var/www/html; index index.html index.htm index.php; autoindex on; autoindex_exact_size off; autoindex_localtime on; limit_conn one 2; limit_rate 10k; }
该配置中分了两部分。上面一部分用到了模块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模块丰富。