如何通过在Ubuntu上设置FTP带宽限制来优化下载速度?
- 内容介绍
- 文章标签
- 相关推荐
在Ubuntu服务器上运行FTP服务时往往会遇到两个常见痛点:
- 下载大文件时总是卡顿,速度远低于带宽上限。
- 某些高峰期使用者占用过多带宽,导致其他业务被拖慢。其实,
一、为什么需要带宽限制?
通过设置合理的带宽上限可以实现:
- 保障关键业务的稳定性;
- 防止单个使用者或IP耗尽所有可用流量;
- 整程序统吞吐量,让使用者用起来更舒服。其实,
二、使用vsftpd配置全局带宽限制
1. 安装与基本启用
# 更新软件源
sudo apt update && sudo apt install vsftpd
# 启动并设置开机自启
sudo systemctl enable vsftpd
sudo systemctl start vsftpd
2. 编辑配置文件 /etc/vsftpd/vsftpd.conf
添加或修改以下参数:
# 启用全局带宽限制
bandwidth_enable=YES
# 设定全局上传/下载速率
bandwidth_limit=1048576 # 1 MB/s
bandwidth_limit_m=1048576
# 每个IP最大限速
bandwidth_max_per_ip=51200 # 50 KB/s
3. 验证配置是否生效
-
检查语法错误:
sudo vsftpd -t /etc/vsftpd/vsftpd.conf -
重新启动以应用更改:
sudo systemctl restart vsftpd -
本机测试:
ftp localhost> get bigfile.iso> put upload.iso并观察程序监控工具确认速率接近设定值。
三、细化到使用者层面的限制
1. 本地使用者限速示例
# 本地使用者下载/上传默认 100 KB/s
local_max_rate=102400
# 匿名使用者仅限下载 50 KB/s。上传通常禁用
anon_max_rate=51200
2. 按需调整 per-user 或 per-group 限制
Might require additional modules such as mod_bandwidth.c in ProFTPD or custom scripts in vsftpd.
四、使用Trickle限制客户端带宽
1. 安装 Trickle 并启用开机自启
# 安装 Trickle
sudo apt install trickle
# 将其加入程序启动脚本,例如 /etc/init.d/trickle-vsftpd
# 示例:限制 vsftpd 客户端上传 100KB/s,下载 50KB/s
trickle -u 100 -d 50 ftp &
这行命令会在后台启动一个 FTP 会话,并对其进行速率控制。
2. 对特定 IP 或接口做全局限速
# 示例:将主机192.168.1.100 的出站带宽限制为10 Mbit/s
sudo tc qdisc add dev eth0 root handle 1: htb
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo iptables -t mangle -A OUTPUT -s 192.168.1.100 -j MARK --set-mark 10
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 handle 10 fw flowid 1:10
``
说到注意。上述规则在重启后会失效,需要写入持久化脚本或使用tc` 配置文件。
常见痛点方法
| 痛点 | 对应方法 |
|---|---|
| 下载大文件卡顿 | 设置全局和 per-IP 限速;怎么说呢,使用 tc 调整链路质量 |
| 单个使用者占满所有带宽 | local_max_rate 与 anon_max_rate 分别控制 |
| 程序资源被占用过度 | 使用 Trickle 对客户端进程进行轻量级限速 |
- KISS 原则:Simplify configuration by starting with global limits and only adding per-user settings when necessary.
- Persistent Configuration:`tc` 和 `iptables` 的规则最好写入 `/etc/network/if-up.d/` 脚本。以保证重启后自动加载,其实,
- Monitoring & Logging:`vnstat`。`iftop`,或 `nload` 可以实时监控实际传输速度,从而验证是否达到了预期。
- Tuning Example:`vsftpd` 全局上传/下载设为200KB/s,再根据网络条件微调至最优值。
在Ubuntu服务器上运行FTP服务时往往会遇到两个常见痛点:
- 下载大文件时总是卡顿,速度远低于带宽上限。
- 某些高峰期使用者占用过多带宽,导致其他业务被拖慢。其实,
一、为什么需要带宽限制?
通过设置合理的带宽上限可以实现:
- 保障关键业务的稳定性;
- 防止单个使用者或IP耗尽所有可用流量;
- 整程序统吞吐量,让使用者用起来更舒服。其实,
二、使用vsftpd配置全局带宽限制
1. 安装与基本启用
# 更新软件源
sudo apt update && sudo apt install vsftpd
# 启动并设置开机自启
sudo systemctl enable vsftpd
sudo systemctl start vsftpd
2. 编辑配置文件 /etc/vsftpd/vsftpd.conf
添加或修改以下参数:
# 启用全局带宽限制
bandwidth_enable=YES
# 设定全局上传/下载速率
bandwidth_limit=1048576 # 1 MB/s
bandwidth_limit_m=1048576
# 每个IP最大限速
bandwidth_max_per_ip=51200 # 50 KB/s
3. 验证配置是否生效
-
检查语法错误:
sudo vsftpd -t /etc/vsftpd/vsftpd.conf -
重新启动以应用更改:
sudo systemctl restart vsftpd -
本机测试:
ftp localhost> get bigfile.iso> put upload.iso并观察程序监控工具确认速率接近设定值。
三、细化到使用者层面的限制
1. 本地使用者限速示例
# 本地使用者下载/上传默认 100 KB/s
local_max_rate=102400
# 匿名使用者仅限下载 50 KB/s。上传通常禁用
anon_max_rate=51200
2. 按需调整 per-user 或 per-group 限制
Might require additional modules such as mod_bandwidth.c in ProFTPD or custom scripts in vsftpd.
四、使用Trickle限制客户端带宽
1. 安装 Trickle 并启用开机自启
# 安装 Trickle
sudo apt install trickle
# 将其加入程序启动脚本,例如 /etc/init.d/trickle-vsftpd
# 示例:限制 vsftpd 客户端上传 100KB/s,下载 50KB/s
trickle -u 100 -d 50 ftp &
这行命令会在后台启动一个 FTP 会话,并对其进行速率控制。
2. 对特定 IP 或接口做全局限速
# 示例:将主机192.168.1.100 的出站带宽限制为10 Mbit/s
sudo tc qdisc add dev eth0 root handle 1: htb
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo iptables -t mangle -A OUTPUT -s 192.168.1.100 -j MARK --set-mark 10
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 handle 10 fw flowid 1:10
``
说到注意。上述规则在重启后会失效,需要写入持久化脚本或使用tc` 配置文件。
常见痛点方法
| 痛点 | 对应方法 |
|---|---|
| 下载大文件卡顿 | 设置全局和 per-IP 限速;怎么说呢,使用 tc 调整链路质量 |
| 单个使用者占满所有带宽 | local_max_rate 与 anon_max_rate 分别控制 |
| 程序资源被占用过度 | 使用 Trickle 对客户端进程进行轻量级限速 |
- KISS 原则:Simplify configuration by starting with global limits and only adding per-user settings when necessary.
- Persistent Configuration:`tc` 和 `iptables` 的规则最好写入 `/etc/network/if-up.d/` 脚本。以保证重启后自动加载,其实,
- Monitoring & Logging:`vnstat`。`iftop`,或 `nload` 可以实时监控实际传输速度,从而验证是否达到了预期。
- Tuning Example:`vsftpd` 全局上传/下载设为200KB/s,再根据网络条件微调至最优值。

