LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx如何设置限制每个连接的访问速度?

admin
2025年8月21日 17:58 本文热度 37

在 Nginx 中限制每个连接(即每个客户端)的访问速度,主要使用的是 limit_rate 和 limit_rate_after 这两个指令。

这是一个非常实用的功能,常用于提供大文件(如视频、ISO镜像)下载的服务,以确保单个客户端不会耗尽所有带宽,保证服务器资源的公平使用。

核心指令

  1. limit_rate

    • limit_rate 100k; 表示将速率限制在每秒 100KB。

    • ​limit_rate 500k; 表示将速率限制在每秒 500KB。

    • limit_rate 1m; 表示将速率限制在每秒 1MB。

    • 功能:用于限制单个连接的传输速率。

    • 单位:默认是字节每秒 (B/s)。但通常我们用千字节 (k) 或兆字节 (m) 来表示更方便。

    • 示例

  2. limit_rate_after (可选,但推荐使用)

    • limit_rate_after 10m; 表示在传输了 10MB 数据后开始限速。

    • limit_rate_after 100k; 表示在传输了 100KB 数据后开始限速。

    • 功能:指定在传输了多少数据之后才开始限速。在达到这个阈值之前,传输速度是不受限制的。

    • 为什么需要它:这对于提升用户体验非常有用。例如,允许用户快速加载页面的前几兆内容(如网页本身、小图片),或者允许视频/音频播放器快速缓冲开头的部分,以保证流畅播放,然后再对后续的下载进行限速。

    • 单位:同样支持 k (千字节) 和 m (兆字节)。

    • 示例

配置方法

这些指令可以放在 Nginx 配置文件的多个上下文中,作用范围不同。

  1. 在 server 块中设置(对整个虚拟主机生效)

server {

    listen 80;

    server_name example.com;


    # 在传输了 5MB 数据后,将速度限制为每秒 200KB

    limit_rate_after 5m;

    limit_rate 200k;


    ... # 其他配置

}

  1. 在 location 块中设置(对特定请求生效)

这是更常见的用法,可以只对下载大文件的路径进行限速。

server {

    listen 80;

    server_name example.com;


    # 正常网站内容,不限速

    location / {

        root /usr/share/nginx/html;

    }


    # 对下载目录 /download/ 下的所有文件进行限速

    location /download/ {

        alias /data/downloads/;


        # 前10MB不限速,之后限速为每秒 500KB

        limit_rate_after 10m;

        limit_rate 500k;

    }


    # 针对特定的文件类型,例如 .iso 文件进行更严格的限速

    location ~* \.(iso|img)$ {

        # 前 20MB 快速下载,之后限速为每秒 100KB

        limit_rate_after 20m;

        limit_rate 100k;

    }

}

  1. 通过 $limit_rate 变量进行动态控制(高级用法)

limit_rate 指令实际上设置的是 $limit_rate 变量的值。这个变量可以在运行时被修改,从而实现动态限速。

示例:根据请求参数中的 speed 值来动态限速

# 在http块中定义一个map,将参数映射为速率值

map $arg_speed $limit_rate_val {

    default   100k;    # 默认100KB/s

    high      500k;    # ...?speed=high 则500KB/s

    low       50k;     # ...?speed=low  则50KB/s

    unlimited off;     # ...?speed=unlimited 则不限速(‘off’ 表示取消限制)

}


server {

    listen 80;

    server_name example.com;


    location /download/ {

        alias /data/downloads/;

        limit_rate_after 10m;

        limit_rate $limit_rate_val; # 使用map定义的变量值

    }

}

这样,用户访问 https://example.com/download/file.iso?speed=high 就可以获得更快的下载速度。

    • 根据条件限速:例如,通过 map 或 if 判断某些条件(如特定IP、请求参数等)来设置不同的速率。

    • 通过代理设置限速:在反向代理场景中,可以在 location 块中设置。

重要注意事项

  • 作用单位limit_rate 限制的是每个 Nginx 工作进程每个客户端之间的单个连接的速率。如果一个客户端打开了多个连接(例如,用下载工具多线程下载),那么它的总速度是 limit_rate * 连接数

  • 全局限速:如果要严格地“每个IP地址”或“每个用户”进行全局限速,需要使用 limit_conn_zone 和 limit_conn 来限制并发连接数,再配合 limit_rate 才能达到更好效果。limit_rate 本身不限制连接数。

  • 生效时机limit_rate 指令在向客户端发送响应时生效。对于已经建立连接的 keep-alive 请求,指令会在新请求到来时应用。

  • 测试:配置完成后,记得使用 nginx -t 测试配置语法是否正确,然后使用 nginx -s reload 重载配置。测试限速效果可以使用 wgetcurl 或浏览器下载文件进行观察。

总结

指令​作用示例说明
limit_rate限制单个连接的传输速率limit_rate 200k;速度限制为 200KB/s
limit_rate_after定义在传输多少数据后开始限速limit_rate_after 10m;前 10MB 不限速,之后开始限速

最简单的配置就是在你的 server 或 location 块中加入:

limit_rate_after 5m;

limit_rate 100k;


该文章在 2025/8/22 14:18:34 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved