nginx做下载服务器,在性能上满足需求。自带limit模块可以做限速和限制并发数,无需再另外编译安装。我们的下载的压力主要在带宽这块。
现在多线程的下载工具太多,为了保证带宽的使用。特做了单IP并发连接数并限制下载速度。可以根据实际环境来调节。
先定义一个“limit”的记录区
limit_zone limit $binary_remote_addr 10m;
location /dl/ {
limit_conn limit 8; ###并发数
limit_rate 100k; ###单个线程最大下载速度,单位KB/s
}
=============================================
示例:
limit_zone one $binary_remote_addr 32k;
server {
listen 80;
server_name 192.168.1.222;
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;
}
=========================================
限速处理
限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置
首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子
http {
limit_zone one $binary_remote_addr 10m;
server {
location /files/ {
limit_conn one 1;
limit_rate 20k;
}
}
}
说明:
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。
limit_conn one 1;
限制在one中记录状态的每个IP只能发起一个并发连接。
limit_rate 20k;
对每个连接限速20k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
说明:
limit_zone,针对每个IP定义一个存储session状态的容器。要求大于等于32K。
limit_conn,限制每个IP发起的连接数,比如本实例设了2个,当我用IE进行单线程下载的时候还可以打开该站点的一个网页。而用迅雷下载时,迅雷会启用2个线程下载,所以当再去打开网页的时候,服务器端会返回错误请求。该值建议设置得高一些,比如15左右。
limit_rate,限制每个连接速度为10K,此限制是针对单个线程,比如这个例子,我用IE下载是10K,当用迅雷时它会占用2个线程,所以迅雷下载速度为20K,此实例也很好的解释了迅雷下载速度快的原因。
阅读(2439) | 评论(0) | 转发(0) |