proxy_upload_rate 是 nginx stream 模块中限制 nginx 向后端 tcp 连接发送数据速率的指令,单位为字节/秒(支持 k/m),仅在 stream 块的 server 内生效,非 per-connection 独立限速而是 per-proxy-pass 连接粒度,依赖系统时钟精度,存在微小抖动。

proxy_upload_rate 是 Nginx stream 模块中用于限制客户端向后端服务器上传数据速率(即代理方向的出向流量)的关键指令。注意:这里的“上传”指从 Nginx 代理视角 —— 客户端发给 Nginx,Nginx 再转发给后端,所以 proxy_upload_rate 实际限制的是 Nginx 向后端发送数据的速度(即四层代理的“出向”带宽),而非客户端上行到 Nginx 的速度。
但需特别注意:该指令仅对 TCP 连接生效,不支持 UDP;且其限速行为是字节级、滑动窗口式、依赖系统时钟精度的,并非严格实时的硬限速,存在微小抖动或短时超发可能(如知识库中提到的“10 字节/秒却立刻收到第二包”现象)。
✅ 正确配置 proxy_upload_rate 的前提条件
- Nginx 版本 ≥ 1.19.0(
stream模块基础支持) - 编译时已启用
--with-stream(必须) - 配置位于
stream { ... }块内,不能写在http { ... }中 - 仅在
server { ... }或upstream { ... }的proxy_pass上游连接阶段生效
示例最小可用配置:
stream {
upstream db_backend {
server 192.168.1.100:3306;
}
server {
listen 3307;
proxy_pass db_backend;
proxy_upload_rate 100k; # 限制 Nginx 向后端发送数据 ≤ 100 KB/s
proxy_download_rate 50k; # (可选)限制后端返回给 Nginx 的速率 ≤ 50 KB/s
proxy_timeout 30s;
}
}
⚠️ 注意:
proxy_upload_rate 100k表示每秒最多向后端写入 100 KiB(1024×100 = 102400 字节),单位支持k(KiB)、m(MiB)、无单位(字节/秒)。不支持kbps或Mbps等比特单位。
Codex Sub Agents 1下载使用 OpenAI Codex CLI 处理编码任务。触发词:codex、code review、fix CI、refactor code、implement feature、coding agent、gpt-5-codex。Clawdbot 可将编码工作委托给 Codex CLI 作为子代理或直接工具。
⚙️ 限速生效的关键机制与常见误区
不是 per-connection 独立限速,而是 per-proxy-pass 连接粒度
每个从 Nginx 建立到后端的 TCP 连接,单独应用该速率限制。多个并发连接会各自受限,总出口带宽 ≈ 单连接限速 × 并发数(受worker_connections和连接复用影响)。-
依赖
epoll/kqueue事件循环和系统时钟更新频率
Nginx 在每次写事件触发时检查剩余配额,若当前时间窗口(约 10–100ms 精度)内配额未耗尽,则允许发送;否则延迟调度。因此:- 小包高频发送(如每 5ms 发 100 字节)可能在单个时间片内集中发出,造成瞬时超限;
- 大包发送(如一次 write 50KB)会被自动拆分并按配额节流,无需手动分片。
不兼容
reuseport或 UDP 监听proxy_upload_rate仅作用于 TCP 代理连接。UDP 是无连接协议,Nginx stream 对 UDP 仅做报文转发,不维护连接状态,故该指令在listen ... udp;下完全无效。-
不继承 upstream 配置,必须写在 server 块内
以下写法 ❌ 错误:upstream backend { server 1.1.1.1:8080; proxy_upload_rate 100k; # 无效!stream upstream 不支持该指令 }正确写法 ✅ 是在
server { ... }中直接设置。
? 实际调优建议
结合
proxy_buffering off使用更可控
默认proxy_buffering on会缓存部分数据再批量发送,可能掩盖限速效果。设为off可让限速更贴近实时字节流控制(但会略微增加系统调用开销)。配合
proxy_timeout防止慢速连接堆积
限速后连接可能变“长”,建议同步调低proxy_connect_timeout和proxy_timeout,避免慢连接长期占用 worker 资源。监控验证是否生效
使用ss -i查看连接发送队列(bbr:(bw:)字段)、或在后端用iftop -P <port></port>观察实际接收速率;也可开启 Nginx debug 日志(error_log ... debug;)搜索limit rate相关日志行。-
替代方案考虑(如需严格硬限速)
若业务要求毫秒级精准控速(如金融行情推送),建议:- 在 Linux 内核层用
tc qdisc做出口整形(更底层、更稳定); - 或改用专用 LB 设备(如 NLB、F5)或 eBPF 工具(如 Cilium)实现纳秒级流控。
- 在 Linux 内核层用
Nginx 的 proxy_upload_rate 是轻量、易集成的四层出向限速手段,适合大多数中低频数据库代理、SSH 跳转、IoT 设备接入等场景。理解其字节级+时间窗协商的本质,就能避开“不生效”的误判,用好这个实用功能。











