x86服务器跑CDN如何限制带宽,带宽限制方法有哪些?

x86服务器跑CDN要限制带宽,核心思路是在数据链路层用tc的htb队列做出口限速,再配合内核参数调优和Nginx层限速,三者叠加才能压得住。多数情况下,单靠应用层限速是不够的,因为CDN节点流量大、连接数多,内核协议栈本身也会成为瓶颈。

cdn节点服务器带宽限制设置方法:先搞懂流量从哪来

CDN节点的带宽消耗主要来自三部分:用户请求下行流量、回源流量、节点间同步流量,做限制之前,先用iftop或nload观察峰值时段,确认是哪个方向把带宽打满。

如何正确配置cdn
加载中
如何正确配置cdn
晓
晓翼安全组
3812--
原视频地址

常见场景是用户侧下行流量占大头,比如视频分发节点,凌晨两点还有大量拖拽请求,这时候需要区分的是:是正常业务峰值,还是被刷流量,两种情况处理逻辑完全不一样。

用tc的htb队列做基础限速

tc(Traffic Control)是Linux内核自带的流量控制工具,htb(Hierarchical Token Bucket)是其中最适合做带宽限制的队列规则,操作路径如下:

# 清除现有规则
tc qdisc del dev eth0 root 2>/dev/null
# 创建htb根队列
tc qdisc add dev eth0 root handle 1: htb default 10
# 配置总带宽限制,比如300Mbps
tc class add dev eth0 parent 1: classid 1:1 htb rate 300mbit
# 配一个子类,保证普通业务最低拿到200Mbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit ceil 300mbit

这里的rate是保证带宽,ceil是最大可用带宽,跑CDN的服务器通常是多核CPU,网卡队列多,建议按CPU核心数划分多个htb子类,避免单队列竞争导致吞吐量上不去。

iptables的connlimit别忽略

带宽限制不只是吞吐量的事,新建连接速率更关键,CDN节点最怕的是大量短连接打过来,每次都要过一遍协议栈,CPU很快就满了,用iptables的connlimit模块做连接速率限制:

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2000 --connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp --dport 80 -m recent --name httpflood --update --seconds 60 --hitcount 3000 -j DROP

第一条限制单IP最大并发2000连接,第二条检测60秒内新建连接超过3000次的IP直接丢弃,这个配合tc一起用,效果比单独限带宽更理想。

x86架构cdn带宽控制方案对比:软件限速各有优劣

行业内常见的方案有tc限速、Nginx层限速、以及专门的流量控制工具,三者的适用场景不同。

方案 粒度 对CPU的影响 适用场景
tc + htb 设备级 低,内核处理 物理机整体出口限速
Nginx limit_rate 请求级 中等 对特定URL/客户端限速
Trickle等用户态工具 进程级 较高 测试环境,生产不推荐

行业共识认为,生产环境优先用tc做第一层粗粒度限制,然后Nginx层做细粒度控制,这类组合方案能较好平衡性能和灵活性。

Nginx层的限速配置实操

Nginx有两个方向可以做限速:limit_rate控制单连接下载速度,limit_req控制请求速率。

location /videos/ {
    limit_rate 500k;  # 单连接限速500KB/s
    limit_rate_after 5m;  # 前5MB不限速,之后开始限
    limit_conn perip 4;  # 单IP最多4个并发连接
}

这里特别说明limit_rate_after的用法:前几MB不限速,是为了兼顾首屏体验,CDN的客户最在意首包时间,如果一上来就限速,TTFB会很难看,等流量跑起来再限制,体感会好很多。

XDP/eBPF方案是x86平台的加分项

近几年内核社区把XDP(eXpress Data Path)推进到了生产可用水平,它绕过了传统内核网络栈,直接在网卡驱动层做丢包或转发,对CPU占用极低。

用bpf_helpers写一个简单的限速程序,思路是维护每个IP的令牌桶,这个方案适合流量规模比较大的CDN节点比如单机跑满万兆网卡的情况,不过需要网卡驱动支持XDP,老款Intel 82599系列就不行,Mellanox CX4以上和部分新款Intel X710可以。

cdn服务器带宽跑满怎么解决:从内核参数到底层工具排查

带宽显示跑满,不一定是真的出口带宽不够,有可能是在某个中间环节卡住了,以下是排查顺序:

  1. 看有没有软中断瓶颈:cat /proc/net/softnet_stat,第二列drop值持续增长说明CPU处理不过来,这时要调netdev_budget和net.core.netdev_max_backlog
  2. 检查网卡多队列:lspci -vvv确认网卡开启RSS,或者用ethtool -l eth0查看队列数
  3. 确认tc是否有丢包:tc -s qdisc show dev eth0看dropped字段

内核参数调优清单

CDN节点是典型的网络密集型场景,以下参数直接影响带宽上限:

# 文件描述符上限要提高
echo "fs.file-max = 6553600" >> /etc/sysctl.conf
# 连接队列加大
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
# 本地端口范围放宽,避免TIME_WAIT占满端口
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
# TIME_WAIT快速回收
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
sysctl -p

注意tcp_tw_reuse只对主动连接方有效,CDN节点多数情况是服务端,这个参数的作用有限,真正有效的是开启tcp_tw_recycle,但NAT环境下容易出问题,需谨慎,现在内核版本也倾向于废弃它。

PPS攻击导致带宽异常的处理

有一种情况是带宽没到上限,但网卡的小包处理能力先到顶了,比如每秒200万PPS的SYN Flood,每个包只有几十字节,带宽可能才跑200Mbps,但CPU已经100%了。

这种场景需要配置网卡的RSS队列数,以匹配CPU核心数量,同时可以给iptables加一条针对小包的限制规则:

iptables -A INPUT -p tcp --syn -m length --length 40:60 -m limit --limit 10000/s --limit-burst 20000 -j ACCEPT

Linux物理机和虚拟化场景的带宽限制差异

跑CDN的x86服务器,有的是物理机安装,有的则基于KVM虚拟化环境,两种场景在限速方式上有所不同。

物理机直接操作eth0即可(使用上述tc规则),而KVM环境下,需要关注宿主机和虚拟机两层:

  • 宿主机上通过tc限速vnet0(虚拟网卡对应的tap设备),
  • 虚拟机内部对eth0限速。

需要注意,宿主机的tc优先级更高,虚拟机内部的限速规则不会超越它,具体操作是在宿主机执行:

tc qdisc add dev vnet0 root handle 1: htb
tc class add dev vnet0 parent 1: classid 1:1 htb rate 100mbit

这种方案比较适合中小规模cdn节点省钱方案一台物理机跑多个虚拟机实例,每个客户分配独立的带宽上限。

调度层配合:不只靠单机限速

单机限速只是第一步,比较正规的CDN架构会把调度层和节点层分开,DNS调度或HTTPDNS会根据节点的实时带宽水位做流量分配。

实际部署时可以在节点上定期把带宽数据上报给调度中心,当节点带宽快满时,调度中心就少分配新流量过来,这种联动机制需要运维同学自己设计,但多数情况下可以先用简单的脚本实现。

比如写一个cron任务,每30秒检测一次实时带宽:

#!/bin/bash
bandwidth=$(cat /sys/class/net/eth0/statistics/rx_bytes)
sleep 30
bandwidth_later=$(cat /sys/class/net/eth0/statistics/rx_bytes)
rate=$(( (bandwidth_later - bandwidth)  8 / 30 ))
echo "$rate" > /var/run/node_bw_usage

调度层写个接口读这个数值,超过阈值就把节点标记为overloaded,这个方案不复杂,但很实用。

Q&A:常见带宽控制问题

Nginx层限速和tc限速冲突吗?

不冲突,tc是在内核协议栈的出口处生效,Nginx的limit_rate是在应用层控制每个连接的发送速率,两者作用点不同,可以同时使用,tc粒度更粗,保证整个网卡出口不超限;Nginx粒度更细,精确控制每一类请求的速度。实际部署时建议都用,tc做兜底,Nginx做精细化控制。

其他软件如varnish、atlas的限速配置在哪里?

varnish没有内置的限速模块,需要配合vmod或者前置的负载均衡器做,atlas(Apache Traffic Server)的限速在records.config里配置,核心参数是proxy.config.http.insert_request_via_str和proxy.config.http.limit_rate,单位是字节/秒,但实话说,varnish和nginx在动态请求限速方面没有本质区别,核心都是靠上游应用配合。

x86平台上iptables对带宽限制有用吗?

iptables本身不限带宽,但可以用hashlimit模块做速率匹配,也算是间接限制:

iptables -A FORWARD -p tcp --dport 80 -m hashlimit --hashlimit-above 1000/s --hashlimit-burst 2000 --hashlimit-mode srcip -j DROP

超过每秒1000次连接请求的IP会被丢弃,这个方案适合防CC攻击场景,不过对吞吐量限制没用,吞吐量限制还得靠tc。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/771658.html

赞 (0)
上一篇 2026年10月21日 17:25
下一篇 2026年10月21日 17:26

相关推荐

  • 服务器维护中是什么意思,需要多久才能恢复?

    服务器维护中是指服务器因系统升级、故障修复、安全更新或硬件调试等原因,计划内暂停服务,期间用户无法正常访问网站或使用相关功能,通常维护结束后会自动恢复,服务器维护中是什么意思?核心解释与常见场景服务器维护中,简单说就是你正在访问的网站或应用,因为后台服务器需要“做检查、打补丁、换零件”而临时停止对外服务,这就像……

    2026年7月19日
    1500
  • AIOT教育到底是什么?AIOT教育应用案例有哪些

    AIOT教育并非简单的技术堆砌,而是通过物联网与人工智能的深度融合,实现从“标准化灌输”到“个性化精准赋能”的教育范式重构,其核心价值在于提升教学效率与学习体验,AIOT教育如何重塑课堂生态传统的教室往往是信息的单向通道,老师讲、学生听,反馈滞后且模糊,AIOT(人工智能物联网)技术的介入,让教室变成了会思考……

    2026年6月11日
    3710
  • 苹果6p换卡后为何无服务器,解决方法是什么

    苹果6p换卡后显示无服务,多半是卡贴失效、运营商设置冲突或SIM卡兼容问题,具体到iPhone 6 Plus这款老机型,还与基带硬件老化有关,为什么偏偏是苹果6p换卡后出问题iPhone 6 Plus上市已有年头,它的基带芯片和射频电路设计针对的是当年的网络制式,如今运营商基站升级频繁,2G/3G退网进程加速……

    2026年8月28日
    800
  • CS完美平台连不上服务器咋办,网络故障排查方法?

    完美平台连接不上服务器,别急着重装系统,多数情况是平台节点波动、本地DNS缓存或加速器冲突,按本文顺序排查,通常几分钟就能恢复,先给你一个基本判断:如果电脑能正常打开网页,但完美平台一直转圈或提示“连接服务器超时”,那问题基本出在平台与网络之间的握手环节,而不是你的宽带断了,接下来按模块排查,每一步都有明确操作……

    2026年10月8日
    200
  • AI推荐秒杀真的有用吗?AI推荐算法原理

    AI推荐秒杀的核心在于利用算法实时捕捉用户意图,通过动态定价与个性化推送,在极短时间内完成从流量到转化的闭环,其本质是“人找货”向“货找人”的精准匹配革命,在2026年的电商生态中,传统的“搜索-比价-下单”路径正在被彻底重构,消费者不再满足于被动浏览,而是渴望即时满足,AI推荐秒杀并非简单的打折促销,而是一套……

    2026年6月7日
    3700
  • 服务器CPU怎么看几核几线程,怎么查看CPU核心数和线程数?

    服务器查看CPU几核几线程,核心就一句话:Linux下用lscpu或cat /proc/cpuinfo,Windows下用任务管理器或wmic命令,看“核心数”和“逻辑处理器”两项即可,为什么你必须分清物理核和逻辑核服务器CPU的“核”和“线程”是两个完全不同的概念,但多数新手站长容易混为一谈,物理核:CPU芯……

    2026年10月4日
    200
  • BuyVM年付$24便宜VPS值得买吗,纽约机房VPS推荐

    BuyVM年付仅需$24即可拥有不限流量的1G带宽VPS,适合预算有限且需要大流量传输的用户,推荐首选拉斯维加斯或纽约节点,在云服务器市场,价格与性能的平衡点始终是用户关注的焦点,对于个人开发者、小型博客站长以及需要搭建私有云存储的用户而言,寻找一款高性价比的VPS(虚拟专用服务器)是首要任务,BuyVM因其极……

    2026年6月29日
    1500
  • 南京GPU服务器租用去哪里找最靠谱?,哪家便宜

    南京GPU服务器租用,别只看价格,先明确你的用途和预算,找服务商建议优先考虑本地数据中心或国内主流云厂商,对比报价时重点看GPU型号、显存、带宽、租期灵活性和售后支持,综合性价比才是关键,南京GPU服务器租用去哪找在南京租用GPU服务器,选择范围其实不小,本地服务商和一线云厂商都能提供,关键是看你的场景对低延迟……

    2026年8月13日
    1400
  • 简米云服务器4核8g性能怎么样,配置和价格划算吗

    阿里云服务器4核8g配置属于当前性价比最高的入门级通用型云服务器,能够稳定承载日均数千IP的网站、中小型应用后端及开发测试环境,对于绝大多数初创企业和个人开发者而言完全够用,阿里云4核8g服务器核心配置解读计算能力与实际表现4核vCPU(虚拟处理器)和8GB内存的组合,在云计算领域被定义为标准通用型配置,这个配……

    2026年8月27日
    1300
  • Excel新建规则怎么操作?excel条件格式新建规则详细步骤

    在Excel中设置条件格式的新建规则,核心在于明确“基于什么数据”、“满足什么条件”以及“呈现什么样式”,通过精准选择公式或数值比较,即可实现自动化的高亮显示与数据预警,很多用户面对Excel密密麻麻的数据时,往往感到无从下手,手动查找不仅效率低下,还容易出错,Excel内置的“新建规则”功能就像一位不知疲倦的……

    2026年7月11日
    9100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注