You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 7+Nginx高带宽流媒体服务器FTP连接失败及带宽分配需求求助

CentOS 7+Nginx高带宽流媒体服务器FTP连接失败及带宽分配需求求助

嗨,我完全懂你现在的糟心处境——1Gbps端口被流媒体跑满后,连FTP都没法正常连接,根本传不了新文件,而且之前给Nginx设的连接/下载限速完全没起作用,又没法用CDN,确实头疼。别慌,咱们可以通过**Linux内核自带的流量控制工具(TC)**来给SSH和FTP强制预留固定带宽,这是最直接有效的解决方案,不需要额外花钱。

核心思路

Nginx的限速是针对单个连接的,当大量用户同时访问流媒体时,总带宽还是会吃满整个端口;而TC是在网卡层面做全局流量管控,能给特定服务(比如SSH、FTP)锁定专属带宽,哪怕其他服务跑满剩余带宽,这部分预留资源也不会被占用。

具体操作步骤

1. 先确认关键信息

  • 你的服务器网卡名称:用ip addr命令查看,通常是eth0、ens33这类,记下来后面要用
  • FTP的端口配置:默认主动模式是20、21端口;如果是被动模式(大部分FTP客户端默认用这个),要查看你FTP服务器的配置(比如vsftpd的pasv_min_port和pasv_max_port,假设是30000-30099)

2. 安装TC工具

CentOS里TC属于iproute包,直接安装:

sudo yum install iproute -y

3. 配置带宽管控规则

我把步骤拆成命令,你直接替换网卡名和端口范围就行:

# 替换成你的网卡名
INTERFACE="eth0"

# 先清理旧的流量规则(如果有的话)
sudo tc qdisc del dev $INTERFACE root 2>/dev/null

# 初始化HTB(分层令牌桶)根队列,这是TC里最常用的带宽管控方案
sudo tc qdisc add dev $INTERFACE root handle 1: htb default 20

# 定义总带宽(1Gbps = 1000000kbit)
sudo tc class add dev $INTERFACE parent 1: classid 1:1 htb rate 1000000kbit

# 给SSH/FTP创建专属带宽类,预留5Mbps(5000kbit),rate是保证带宽,ceil是最大带宽,这里直接锁死5M
sudo tc class add dev $INTERFACE parent 1:1 classid 1:10 htb rate 5000kbit ceil 5000kbit

# 给其他服务(比如Nginx流媒体)分配剩余带宽(1000M-5M=995M),没用到的预留带宽也可以被它占用
sudo tc class add dev $INTERFACE parent 1:1 classid 1:20 htb rate 995000kbit ceil 1000000kbit

# 用iptables给SSH/FTP的流量打标记,方便TC识别
sudo iptables -t mangle -F PREROUTING 2>/dev/null
# SSH端口22
sudo iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
sudo iptables -t mangle -A PREROUTING -p tcp --sport 22 -j MARK --set-mark 1
# FTP主动模式端口20-21
sudo iptables -t mangle -A PREROUTING -p tcp --dport 20:21 -j MARK --set-mark 1
sudo iptables -t mangle -A PREROUTING -p tcp --sport 20:21 -j MARK --set-mark 1
# FTP被动模式端口范围(根据你的实际配置修改)
sudo iptables -t mangle -A PREROUTING -p tcp --dport 30000:30099 -j MARK --set-mark 1
sudo iptables -t mangle -A PREROUTING -p tcp --sport 30000:30099 -j MARK --set-mark 1

# 让TC把打了标记的流量导向预留带宽类
sudo tc filter add dev $INTERFACE parent 1:0 protocol ip prio 1 handle 1 fw flowid 1:10

4. 验证配置是否生效

  • 查看队列规则:sudo tc qdisc show dev $INTERFACE
  • 查看带宽类:sudo tc class show dev $INTERFACE
  • 测试:先跑满流媒体带宽(比如用多客户端拉流),再尝试FTP上传/下载,这时应该能正常操作,不会再被带宽占满阻断。

5. 让配置重启后生效

上面的命令重启服务器就会失效,你可以把它做成脚本,再设置开机自启:

  1. 创建脚本文件/usr/local/bin/bandwidth-reserve.sh,把上面的命令复制进去,修改好网卡名和端口范围
  2. 给脚本加执行权限:sudo chmod +x /usr/local/bin/bandwidth-reserve.sh
  3. 创建systemd服务文件/etc/systemd/system/bandwidth-reserve.service:
[Unit]
Description=Reserve Bandwidth for SSH and FTP
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/bandwidth-reserve.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  1. 启用服务:sudo systemctl daemon-reload && sudo systemctl enable --now bandwidth-reserve.service

注意事项

  • 如果你的FTP服务器不是vsftpd,要对应调整被动模式的端口范围
  • 测试时尽量模拟真实的满带宽场景,确保预留的5Mbps足够FTP使用
  • 要是遇到规则不生效,先检查网卡名、端口号有没有写错,或者重启一下network服务

备注:内容来源于stack exchange,提问作者Adonai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:27:52