网站带宽限制与流量管控设置指南

先说清楚:为什么要做带宽限制与流量管控

网站跑着跑着突然变慢、被恶意刷流量导致账单超支、或者共享带宽被一个站点占满 —— 这些场景都逼着你必须对网站带宽做限制。
说白了,带宽限制就是给每个网站/连接设置一个最大速度(比如 10Mbps);流量管控则是控制一段时间内总流量(比如每月 100GB),超了自动限速或关停。
下面我用三种最常见的方法讲清楚操作流程。

准备工作:你需要确认这些条件

  • 服务器操作系统:本文以 CentOS 7/8 和 Ubuntu 20.04+ 为例,命令兼容性已标注。
  • 权限:所有操作需要 root 或 sudo 权限。
  • 可选面板:如果你装了宝塔面板(版本 7.9+),第一种方法可直接用。
  • 基础工具:确保系统已安装 wgetcurlifconfig(或 ip 命令)。

另外,建议先用 uname -r 确认内核版本,tc 命令在 2.6 以上内核都能正常工作。

方法一:宝塔面板网站带宽限制(适合新手)

如果使用了宝塔面板,最快捷的方式是在网站设置里直接限速。

操作路径

  1. 登录宝塔面板 → 左侧【网站】→ 找到目标站点 → 点击【设置】。
  2. 在弹窗中选择【限流】选项卡(如果没有,需要先安装 Nginx 或 Apache 的扩展)。
  3. 勾选【开启限流】。
  4. 填写单连接速度限制(单位 KB/s):例如 1024 表示单个连接最多 1MB/s。
  5. 填写总带宽限制(单位 Mbps):例如 10 表示该站点所有连接最多占用 10Mbps。
  6. 点击保存即可生效。
注意:宝塔的限流是基于 Nginx limit_rate 模块,只能限制 HTTP 响应速度,对 UDP、TCP 等其他协议无效,且对慢速攻击(Slowloris)防御有限。

方法二:使用 tc 命令精确限制网站带宽(推荐服务器级)

tc(Traffic Control)是 Linux 内核自带的流量控制工具,可以对 IP、端口甚至具体进程做限速。
下面限制目标服务器 IP 为 192.168.1.100 的网站流量不超过 5Mbps。

# 第一步:创建根队列规则(假设网卡为 eth0)
tc qdisc add dev eth0 root handle 1: htb default 30

# 第二步:创建根类别(限制总带宽为 5Mbps)
tc class add dev eth0 parent 1: classid 1:1 htb rate 5mbit ceil 5mbit

# 第三步:创建子类别并匹配目标 IP
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit ceil 5mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:10

测试效果:从服务器往外下载一个文件,用 wget -O /dev/null http://192.168.1.100/somefile 观察速度是否被限制在 5Mbps 左右。

如果要取消限制:

tc qdisc del dev eth0 root
避坑:tc 规则重启后失效,建议写入 /etc/rc.local 或 systemd 服务脚本。另外,如果服务器有多个网卡,必须选对实际流量出口的网卡。

方法三:Nginx 限速 + 流量管控脚本(兼顾应用层与总量)

3.1 限制单连接速度

在 Nginx 配置文件(如 /etc/nginx/nginx.conf 或网站配置)的 server 或 location 块中添加:

http {
    # 定义一个限速 zone(10MB 共享内存,记录客户端 IP 和速度)
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_rate_zone $binary_remote_addr zone=con_rate:10m rate=500k;

    server {
        listen 80;
        server_name example.com;

        # 每个 IP 最多同时 5 个连接
        limit_conn addr 5;
        # 每个连接速度限制为 500KB/s
        limit_rate 500k;

        location / {
            proxy_pass http://backend;
        }
    }
}

注意:limit_rate 限制的是每个请求(每个连接)的响应速度,不能直接限制整个站点的总带宽。

3.2 实现月流量总量管控(脚本 + cron)

可以利用 vnstat 统计流量,当超过阈值时自动禁用网站配置或 nftables 规则。

#!/bin/bash
# 每月流量上限(单位 GB)
LIMIT=100
# 网卡接口
IF=eth0
# 本月已使用流量(vns 输出格式可调)
USED=$(vnstat -i $IF -m --json | jq '.interfaces[0].traffic.months[-1].total.tx + .interfaces[0].traffic.months[-1].total.rx' | awk '{print $1/1024/1024/1024}')

if (( $(echo "$USED > $LIMIT" | bc -l) )); then
    # 超过限制,执行操作:例如移除网站 Nginx 配置
    rm -f /etc/nginx/sites-enabled/example.com
    nginx -s reload
    # 或添加 iptables 规则丢弃该网站 IP 的流量
    iptables -A OUTPUT -d 192.168.1.100 -j DROP
    echo "$(date): 流量超限,已禁用 example.com" >> /var/log/flow_control.log
fi

将此脚本加入 cron 每天执行一次:0 0 * * * /root/flow_limit.sh

避坑指南与高频问题

Q:为什么 tc 限速后速度没变?
A:检查是否找错了网卡(用 ip addr 查看主要网卡名);确认没有其他 tc 规则冲突(先 tc qdisc del dev eth0 root 清空再试);部分云服务器(如 AWS、阿里云)的虚拟化环境可能不支持 tc 限速,此时只能依赖云服务商自带限速功能。

Q:宝塔面板限速后网站更卡了?
A:单连接限速值设得过低(如 100KB/s)会导致正常浏览图片都要等很久。建议根据网站平均页面大小估算:若页面 2MB,希望 3 秒加载完,单连接速度应设为 2*1024/3 ≈ 683KB/s

Q:如何知道当前实际带宽使用情况?
A:用 iftop -n, nethogsbmon 实时查看。也可以装 vnstat 记录历史。

Q:流量管控脚本里 vnstat 没数据?
A:先执行 vnstat -u -i eth0 创建数据库,等待几分钟收集数据。

验证限速效果的两种方式

  1. 命令行测速:在另一台机器用 wget -O /dev/null http://your-site.com/bigfile.zip,观察下载速度。限制前和限制后分别测试对比。
  2. 浏览器开发者工具:打开 F12 → Network 标签页,看单个请求的“Time”和“Size”,计算速度(尺寸/时间)。

如果速度与设置值吻合,说明限速生效。

写在最后

网站带宽限制与流量管控设置不是一劳永逸的事,要根据实际访问量和业务类型微调。
新手优先使用宝塔面板的图形界面快速上手;
熟悉后建议用 tc 或 Nginx 配置实现更精细的控制。
遇到问题先回看上面的避坑部分,再做针对性排查。

分享到:
上一篇
网站流量统计分析工具搭建:零基础搭建网站流量统计分析工具
下一篇
网站静态资源压缩加速教程:从零开始为服务器开启Gzip与
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意