不能直接用 limit_conn 限制特定后缀文件并发数,但可通过 location 正则匹配(如 .zip|.pdf|.mp4 等)结合独立 limit_conn_zone(如 perip_download)和 limit_conn + limit_rate_after + limit_rate 实现精准控制,防止大文件挤占带宽。

不能直接用 limit_conn 限制“特定后缀文件”的并发下载数——它作用于 TCP 连接层面,不识别文件后缀或 URL 路径。但可以通过 location 匹配 + limit_conn 组合,间接实现对静态资源(如 .zip、.pdf、.tar.gz 等)的并发控制,从而保障基础带宽不被大文件下载挤占。
定位目标文件类型,用 location 精确拦截
把需要限流的后缀归到一个 location 块中,避免影响 HTML、JS、API 等关键请求:
- 推荐写法(匹配常见二进制/大文件后缀):
location ~* \.(zip|rar|7z|iso|dmg|pdf|mp4|avi|mov|tar\.gz|tgz)$ { - 注意
~*表示大小写不敏感正则匹配,比^~更灵活;避免用=精确匹配,否则无法覆盖多后缀 - 该 location 应放在
try_files或 proxy_pass 之前,确保未被上层规则提前处理
定义独立连接区域,避免与前端流量混用
不要复用全局 perip zone,为下载类请求单独建 zone,防止用户开多个标签页刷页面就触发限流:
- 在
http{}块中添加:limit_conn_zone $binary_remote_addr zone=perip_download:10m; -
perip_download名称需与后续limit_conn中一致,语义清晰便于维护 - 10m 内存足够支撑约 16 万个 IP 记录,中小流量站点够用
在 location 内启用并发限制并搭配限速
仅限流不够,还要防止单连接长期占用带宽。必须组合 limit_conn + limit_rate + limit_rate_after:
- 示例配置:
limit_conn perip_download 3;<br>limit_rate_after 10m;<br>limit_rate 512k;
- 含义:每个 IP 最多 3 个并发下载连接;单连接下载满 10MB 后,速率压到 512KB/s
-
limit_rate是按连接限速,不是按 IP —— 若允许 3 并发,该 IP 最高可占 1.5MB/s 带宽,仍可控 - 建议
limit_rate_after设为略大于首屏资源体积(如 10–50MB),让初始加载快,后续才限速
验证与调优要点
上线前务必测试行为是否符合预期:
- 用
ab -c 10 -n 20 http://yoursite/file.zip模拟并发,观察返回 503 的比例是否接近设定值 - 检查 access_log,确认状态码分布(正常 200 vs 限流 503)和 $request_time 是否合理
- 若发现 Vue SPA 的懒加载 chunk(如 .js 文件)误入该 location,可加白名单排除:
location ~* \.(js|css|woff2|png|jpg|gif)$ { }放在下载 location 上方 - HTTP/2 下每个请求是独立流,
limit_conn仍有效(它限制的是底层 TCP 连接数,不是 HTTP 流),无需额外调整










