设置FTP服务器之间的传输,最可靠的方式是利用FXP协议实现服务器直连,或在服务器端使用lftp这类命令行工具完成中转拷贝,避免通过本地网络下载再上传带来的性能损耗。
FTP服务器之间传输的设置方法
无论是迁移网站数据,还是同步多云存储文件,两台FTP服务器间的传输需求很常见,设置方法取决于服务器是否支持FXP协议以及你的网络环境。
使用FXP协议直连传输
FXP(File eXchange Protocol)让两台FTP服务器直接建立数据通道,文件不经过客户端,速度最快,对中转服务器带宽无要求。
前提条件
- 两台服务器均支持FTP主动模式,且未禁用PORT命令。
- 防火墙允许数据端口(通常为20或协商的高位端口)双向通信。
- 客户端需具备FXP能力,常见的有命令行ftp的
direct选项或专门的FXP客户端如rfxp。
操作步骤
- 在客户端(如Linu服务器)上使用
ftp命令,设置direct开启直连:
ftp -d - 登录源服务器,执行
direct命令(部分客户端用quote xpwd检测)。 - 使用
put或get指定目标服务器地址:
put file.txt | ftp://target-user:pass@target-ip/
也可用quote发送PORT命令强制建立直连。
注意事项
- 大多数公有云FTP服务出于安全考虑默认关闭FXP,需提交工单开启。
- 如果两台服务器防火墙规则复杂,直连可能失败,此时可考虑中转方案。
使用lftp进行中转传输
当FXP不可用时,在服务器上运行lftp作为中间节点,将文件从源FTP下载到本地,再上传到目标FTP,这比经过你的个人电脑快得多,且支持脚本化批量操作。
安装与连接apt install lftp 或 yum install lftp
单次传输命令
lftp -u user1,pass1 -e "mirror --use-pget-n=10 /remote/source /local/tmp; lftp -u user2,pass2 -e 'mirror -R /local/tmp /remote/target; quit' target-ip; quit" source-ip
命令先从源站点下载到本地临时目录,再上传到目标站点。--use-pget-n=10启用10线程并行下载,提升速度。
更简洁的脚本方式
创建批处理文件transfer.sh:
#!/bin/bash
lftp -u user1,pass1 <<EOF
open source-ip
mirror --use-pget-n=5 /source/path /local/tmp
quit
EOF
lftp -u user2,pass2 <<EOF
open target-ip
mirror -R /local/tmp /target/path
quit
EOF
这种方式适合定时任务或大文件传输,中间文件存储在服务器本地,需要确保磁盘空间充足。
FTP服务器之间传输速度慢的优化方案
很多用户反馈在使用ftp服务器之间传输速度慢,原因通常出在传输模式、并发数或网络参数上,以下优化方法经过大量运维实践验证。
检查FTP模式与防火墙配置
- 切换被动模式:大多数服务器在NAT环境后只能使用被动模式,在lftp中执行
set ftp:passive-mode on,在FileZilla等客户端中勾选“被动模式”。 - 开放被动端口范围:在服务器FTP配置中指定被动端口段(如
50000-60000),并在防火墙中放行,避免随机端口被拦截导致连接重置。 - 主动模式调试:如果网络允许,主动模式数据连接只由服务器发起,有时更稳定,但需要客户端公网IP可控。
使用多线程与合并在传输方式
- lftp的
--use-pget-n参数可指定并行下载线程数,建议设为5-10,注意线程数过高会加剧TCP拥塞,反而降低速度。 - 对于大量小文件,先打包成一个大文件再传输,大幅减少握手开销。
tar czf - /source | lftp -u user,pass -e "put -o /target/backup.tar.gz; quit" target-ip
利用管道直接把压缩流上传,避免中间文件。
调整系统网络参数
- 增大TCP窗口:在客户端执行
sysctl -w net.core.rmem_max=16777216 net.core.wmem_max=16777216,并设置
net.ipv4.tcp_rmem和net.ipv4.tcp_wmem。 - 开启TCP时间戳与选择性确认:
sysctl -w net.ipv4.tcp_timestamps=1 net.ipv4.tcp_sack=1。 - 如果延迟较高(如跨洲传输),增加
tcp_slow_start_after_idle=0。
FTP服务器之间传输工具的比较
选择适合的工具直接影响传输效率和可维护性,下表对比了主流方案:
| 工具 | 支持FXP | 多线程 | 脚本化 | 典型场景 |
|---|---|---|---|---|
| lftp | 部分 | 是 | 强 | 服务器脚本、定时同步 |
| curl | 否 | 否 | 中 | 单文件、http/ftp协议兼容 |
| wget | 否 | 否 | 弱 | 简单下载,较少用于服务器上传 |
| rfxp | 是 | 否 | 中 | 服务器直连传输,需公网IP |
| ncftp | 否 | 是 | 中 | 交互式传输,有批量功能 |
实操建议
- 需要自动化批量传输,用lftp,它支持
mirror、queue、at等命令,能处理用户名密码、被动模式、重试等复杂逻辑。 - 偶尔手工传输,推荐
curl,语法简洁:curl -T file.txt ftp://user:pass@target-ip/。 - 追求直连速度且服务器支持FXP,选择
rfxp或配置lftp的set ftp:fxp yes尝试。
跨地域FTP服务器传输的实践技巧
当两台服务器位于不同国家或地区(如国内与海外),延时和丢包率显著上升,直接套用默认设置往往效率低下,以下技巧专门针对这类场景。
选择合理的传输模式
- 强制被动模式:跨地域网络通常有对称NAT或防火墙,主动模式容易失败,在lftp中设置
set ftp:passive-mode yes,并配置set ftp:fxp no避免FXP因不稳定而超时。 - 使用压缩传输:如果服务器支持
MODE Z(FTP压缩),启用后CPU消耗增加但带宽利用率提升,在lftp中用set ftp:compress yes,注意部分服务器不支持此选项,需提前测试。
调整连接参数减少超时
- 增加超时时间:
set net:timeout 120,set ftp:timeout 120,防止高延迟导致断连。 - 启用Keep-Alive:
set ftp:keep-alive yes,每隔30秒发送空命令保持连接。 - 使用多线程但降低线程数:跨地域场景下,
--use-pget-n=3左右最佳,线程过多造成丢包反弹。
利用中间节点加速
如果直接传输极慢,可以考虑在目标服务器所在区域部署一台中转服务器(如同一云厂商的实例),在该中转机上执行lftp传输,从东京服务器传输到法兰克福,先通过内网高速传到东京同一区域的另一台中转机,再走国际链路,行业共识认为,企业级中转方案可提升跨国传输速度50%以上。
常见问题解答
FTP服务器之间传输怎么设置
使用FXP需两端服务器开启主动模式,客户端发送PORT命令,若不可用,在服务器端安装lftp,先下载至本地再上传,并配合多线程与压缩优化,具体命令参考前文“使用lftp进行中转传输”。
如何测试FTP服务器是否支持FXP
登录到服务器后,执行QUOTE FEAT,查看返回结果是否包含FXP或CCC,或者用lftp尝试连接两台服务器,执行set ftp:fxp yes,然后mirror两个远程目录,观察是否输出“FXP connection”类似信息,若失败,控制台会提示“PORT command failed”。
跨地域传输时该用主动还是被动模式
被动模式更适合跨地域场景,因为它由服务器开放数据端口,避免客户端公网IP不可达的问题,在lftp中设置set ftp:passive-mode on,同时配置被动端口范围并放行防火墙,如果两端在同一VPC内,主动模式有时更稳定,但需确认客户端IP可直接访问。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/578176.html




