返回列表 发布新帖
查看: 5|回复: 0

服务器是否可以限制上传带宽?有哪些实现方法?(全方位讲解)

发表于 3 小时前 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在服务器运维与业务部署中,常见的需求之一就是对业务流量进行限速,包括下载(下行流量)和上传(上行流量)。很多人知道下载可以限速,但实际上,上传带宽同样可以被精确限制。
本文将从原理、常见场景以及实现方式三个角度,全面介绍服务器如何限制上传带宽。
一、上传带宽为什么要限制?
上传(Upload)带宽,也称出站带宽(Egress),是服务器向外发送数据的能力。在以下场景中经常需要限制上传:
1. 防止业务占满服务器出口带宽
当某个接口或服务大量上传数据,会导致服务器出口被占满,从而影响其他业务正常通信。
2. 文件/视频分发业务需要控制成本
某些业务上传文件量比较大,如果不加限制,带宽被吃满,成本上升。
3. 避免恶意请求导致出口拥塞(如 CC、Flood)
攻击者利用大量上传请求占满服务器出口,导致其他请求全部延迟。
4. 多业务共享带宽,需要公平分配
同台服务器有多个服务,需要给每个业务配置固定的带宽额度。
二、上传带宽如何被技术实现?
在 Linux 中,网络流量分为两个方向:
流量方向适用带宽描述
ingress下载(进入服务器)客户端 → 服务器
egress上传(从服务器发出)服务器 → 客户端
要限制上传带宽,就必须控制 egress 出站方向。Linux 有两种主流方式:
  • 内核层 tc(traffic control)流控,最专业、最精确
  • Nginx、Docker、K8s 等应用层或容器网络限速
接下来介绍每种方式。
三、方法一:使用 tc 精确限制上传带宽(最常用、最强大)
tc 属于 Linux 内核级流控,可以精确限制:
  • 某个端口的上传带宽
  • 某个 IP 的上传带宽
  • 某个服务的上传带宽
  • 整个网卡出口的总上传带宽
1. 限制整个服务器上传带宽 2Mbps
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:10 htb rate 2mbit ceil 2mbit

2. 限制某个服务(端口)上传带宽
例如服务监听在 8080,会产生上传流量(服务器向客户端响应数据):
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit

tc filter add dev eth0 protocol ip parent 1:0 prio 1 \
u32 match ip sport 8080 0xffff flowid 1:1

注意:上传方向使用 sport(源端口)。
3. 删除 tc 限制
tc qdisc del dev eth0 root

tc 是目前最稳定和专业的限速方法,几乎所有企业级业务都靠它实现带宽控制。
四、方法二:Nginx 限制上传速度(适合文件上传)
如果服务器运行的是 Web 业务(如上传 API),可以通过 Nginx 限速用户上传速度。
示例:限制上传文件速度 500KB/s
client_body_buffer_size 512k;
limit_rate_after 0;
limit_rate 500k;

适合:
  • Web 表单上传
  • 文件上传接口
  • 小程序接口上传
但它无法限制总出口带宽,只能控制用户上传速度。
五、方法三:容器业务的上传限速(Docker / K8s)
1. Docker 容器上传带宽限速
docker run --network-opt "com.docker.network.bridge.egress-bandwidth=5mbit" myapp

适用于部署多容器、多业务平摊带宽。
2. Kubernetes(Calico / Cilium)带宽限制
如果使用 K8s,可在 pod 级别限制上传带宽:
egress:
  bandwidth: 5Mbit

适合云原生场景的多业务隔离。
六、方法四:iptables 限制上传连接速率(频率,不是带宽)
如果你想限制“上传请求数量”,比如防止用户频繁上传:
iptables -A INPUT -p tcp --dport 8080 \
-m hashlimit --hashlimit 10/sec --hashlimit-burst 20 \
-j ACCEPT

这是频率控制 不是带宽控制。
七、哪种方式最适合你?
需求推荐方案
限制某个业务/端口上传带宽tc(推荐)
限制所有出口带宽tc(推荐)
Web 上传(POST)限速Nginx 限速
Docker 容器限速Docker 网络限速
K8s 限速CNI 网络带宽管理
限制请求频率而不是带宽iptables hashlimit
八、总结
服务器不仅可以限制下载带宽,也可以非常精确地限制上传带宽。
最核心的原理是控制 Linux 网卡的 egress 出站流量。
在众多方法中:
✔ tc(traffic control)是最强大、最全面的带宽控制手段
✔ Nginx、Docker、K8s 适合特定场景补充
✔ iptables 主要做频率控制,不是带宽控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.127510 second(s), 6 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表