新闻中心

News

服务器是否可以限制上传带宽?有哪些实现方法?

2025-12-03  

    在服务器运维与业务部署中,常见的需求之一就是对业务流量进行限速,包括下载(下行流量)和上传(上行流量)。很多人知道下载可以限速,但实际上,上传带宽同样可以被精确限制。
    本文将从原理、常见场景以及实现方式三个角度,全面介绍服务器如何限制上传带宽。
一、上传带宽为什么要限制?
    上传(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 主要做频率控制,不是带宽控制




来源:网络

免责声明:该文章系我网转载,旨在为读者提供更多资讯信息。所涉内容不构成投资、消费建议,仅供读者参考。