proxy_upload_rate 是 Nginx(需 OpenResty 或特定编译)中用于限制每个 proxy_pass 连接发往后端的上传速率的指令,其总出口带宽 = 单连接速率 × 活跃连接数,需结合 upstream keepalive、worker_connections 和 limit_conn 等协同控制。
并不是 Nginx 官方指令,你实际想用的是
(控制
发往后端
的出向带宽)或
(控制
发往客户端
的响应带宽)。结合 worker 并发数来控制整体出口带宽,关键在于理解:
Nginx 的带宽限制是 per-connection 的,不是 per-worker 或全局的
。
下面以最贴近你需求的场景——
四层/七层代理中限制发往后端的总出口带宽
(比如爬虫出口、上游服务调用)——来说明如何用
+ worker 配置达成可控、可预期的总带宽。
?
的作用粒度很关键
它不作用于整个 worker 进程,也不作用于整个 upstream 组,而是作用于
每一个从 Nginx 主动发起的proxy_pass TCP 连接
。
这意味着:
每个连接独立限速,比如设为
→ 单连接最大上传速率 ≈ 100 KB/s
若当前有 20 个并发连接打到同一后端,理论总出口带宽 ≈ 20 × 100 KB/s = 2 MB/s
实际值受
、
复用、后端响应速度、TCP 拥塞控制等影响,但趋势稳定
✅ 所以“控制整体出口带宽”的本质,就是:
控单连接速率 × 控活跃连接数
? 如何协同配置:
+ worker 层级参数
你需要在
或
块中设置限速,并通过以下方式约束并发连接规模:
:单个 worker 进程最多能维持多少连接(含客户端+后端)。默认通常 512 或 1024。
:复用后端连接池大小。设为
表示最多缓存 32 个空闲长连接,避免频繁建连放大瞬时并发。
/
:间接影响连接生命周期;开启 buffering 可减少连接等待时间,利于复用。
(配合使用)
:虽然它限的是客户端连接数,但能间接压制源头并发,防止下游疯狂建连导致 upstream 连接数失控。
示例配置(用于爬虫出口网关):
此时理论最大出口带宽 ≈
(约 12.8 Mbps),且较平稳。
⚙️ 更精细的总带宽调控技巧
如果需要更接近目标带宽(如严格卡死在 10 Mbps),可组合以下策略:
用
+
对
客户端响应
做二次限速,避免本地带宽被下游拉满
在
中用
或
分流,避免某后端连接堆积
用
提升失败容忍,减少重试带来的连接毛刺
监控指标:
中的
和
状态数,结合
观察真实 ESTABLISHED 连接数,反推当前并发水平
❗ 注意避坑点
是实验性指令(OpenResty 默认启用,原生 Nginx 需编译
或使用 OpenResty)
不要误用
替代
:前者限的是
回给客户端的响应
,和出向流量无关
+
≠ 总并发 1024:实际受限于系统
、TIME_WAIT 回收、后端处理能力
高频短连接场景下,
效果弱,应优先压测并调低
(如设为 5s),加快连接释放
合理配比单连接速率与连接池规模,比盲目调大
更有效。带宽控制不是堆资源,而是控节奏。
proxy_limit_rateproxy_upload_ratelimit_rateproxy_upload_rateproxy_upload_rateproxy_upload_rate 100k;worker_connectionskeepaliveproxy_upload_ratelocationupstreamworker_connectionsupstream keepalive Nkeepalive 32proxy_requestsproxy_bufferinglimit_connupstream backend_api {
server 192.168.1.100:8000;
keepalive 20; # 后端连接池上限 20,复用为主
}
server {
listen 8080;
location /api/ {
proxy_pass http://backend_api;
proxy_upload_rate 80k; # 每个发往后端的连接 ≤ 80 KB/s
proxy_buffering on;
proxy_buffers 8 128k;
proxy_busy_buffers_size 256k;
# 可选:限制单个客户端最多建立 5 个并发连接,防滥用
limit_conn addr 5;
limit_conn_zone $binary_remote_addr zone=addr:10m;
}
}20(keepalive池)× 80 KB/s ≈ 1.6 MB/slimit_rate_afterlimit_rateupstreamleast_connhash $remote_addr consistentproxy_next_upstream error timeout http_503nginx_stub_statusActive connectionsWritingss -s | grep "tcp:"proxy_upload_rate--with-streamlimit_rateproxy_upload_rateworker_processes auto;worker_connections 1024;ulimit -nkeepalivekeepalive_timeoutworker_connections