服务器带宽被占用,教你限制用户上传下载速度
VPS 或云服务器的带宽被单个用户跑满,网站变慢、SSH 卡顿,很多时候是因为没有对用户的上传下载速度做限制。
下面我分两种场景——有宝塔面板和无面板的纯净 Linux 环境——给你一套可以直接照做的限速方案。
准备工作
操作前确认三件事:
- 你拥有服务器的 root 权限或 sudo 权限。
- 如果使用宝塔面板,确保面板版本 ≥ 7.9(旧版可能缺少限速功能)。
- 知道要限制的用户 IP 或端口(比如 Web 服务的 80/443 端口)。
方法一:宝塔面板限速(适合新手)
如果你安装了宝塔面板,限制上传下载速度非常简单:
- 登录宝塔面板,进入左侧 网站 列表。
- 找到需要限速的网站,点击 设置。
- 切换到 流量限制 标签页。
- 勾选 启用流量限制,分别设置 上行速度(上传) 和 下行速度(下载),单位是 KB/s。例如填
1024代表限制为 1MB/s。 - 点击保存。
说明:宝塔的限速基于 Nginx 的 limit_rate,只对当前网站生效,不会影响其他服务。
方法二:Linux 命令行限速(通用性强)
如果服务器没有面板,或者你想对特定 IP 做更精细的控制,推荐使用 Linux 自带的 tc(Traffic Control)命令。
以下步骤在 CentOS 7/8、Ubuntu 20.04+ 上均测试通过。
步骤1:查看当前网卡名称
ip link show
一般叫 eth0、ens33 或 enp1s0。
记下你要限速的网卡名,下面假设为 eth0。
步骤2:创建根队列规则(htb)
tc qdisc add dev eth0 root handle 1: htb default 30
步骤3:创建一个限速类
限制总带宽为 10Mbps(上传/下载分别控制):
# 限制下载速度 10Mbps(约 1250KB/s)
tc class add dev eth0 parent 1: classid 1:10 htb rate 10mbit
# 限制上传速度 5Mbps(约 625KB/s)
tc class add dev eth0 parent 1: classid 1:20 htb rate 5mbit
步骤4:将指定的 IP 流量匹配到限速类
假如要限制 IP 192.168.1.100 的上传与下载:
# 下载方向(从服务器发往该 IP 的流量)
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.100 flowid 1:10
# 上传方向(从该 IP 发往服务器的流量)
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip src 192.168.1.100 flowid 1:20
要限制整个网段,把192.168.1.100改成192.168.1.0/24即可。
步骤5:使规则持久化(可选)
tc 规则重启后会丢失。
将上面命令写入 /etc/rc.local(需先赋予执行权限)或 systemd 服务脚本。
避坑指南与高频问题
- Q:限速后某些用户反而更卡了怎么办? 可能是速率设置得太低,先逐步提高阈值测试。对于网站流量,通常限制下载为业务带宽的 50% 较为合理。
- Q:宝塔限速后不生效? 检查网站是否使用了 CDN(CDN 流量不经过源服务器),以及 Nginx 配置中是否有
proxy_pass反向代理(需在代理目标上也加限速)。 - Q:tc 命令报错“RTNETLINK answers: File exists” 说明规则已存在,先执行
tc qdisc del dev eth0 root清除旧规则再重新添加。 - 注意:
tc只对出站流量有效(服务器发出的数据),入站流量(上传到服务器)限制需要结合 iptables 或 ifb 模块,初学者建议优先用宝塔面板。
效果验证
宝塔面板用户
在网站设置流量限制后,用浏览器下载站内一个文件,观察下载速度是否被限制在设定值附近。
也可以让朋友上传文件测试上行速度。
命令行用户
安装 speedtest-cli 或 iperf3 进行测速。
例如:
yum install iperf3 -y # CentOS
apt install iperf3 -y # Ubuntu
# 服务端(被限速的机器)运行
iperf3 -s
# 客户端(另一台机器)运行
iperf3 -c 被限速服务器IP -t 10
观察输出中的带宽数值是否接近你设置的限制。
如果你正在处理服务器带宽被占用的问题,建议先尝试宝塔面板的快捷方案;
如果需求更复杂(如限制多 IP、动态限速),再切换到 tc 命令。
限速不要太激进,避免误伤正常用户,留出 10%-20% 余量给系统管理流量。