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

HAproxy中FTP连接异常咨询:首次使用需修改客户机配置吗?

搞定HAproxy转发FTP连接的问题

嘿,刚看到你的问题,作为折腾过不少HAproxy和FTP部署的老玩家,我一眼就瞅出核心问题——你当前的HAproxy默认配置是mode http,而FTP是基于TCP协议的应用,HTTP模式根本没法正确处理FTP的控制连接和数据连接!下面一步步帮你解决:

1. 给HAproxy加专门的FTP转发规则

你需要在HAproxy配置里新增一套针对FTP的frontend和backend,必须用mode tcp模式,还要考虑FTP的主动/被动模式特性:

示例配置片段(直接加到你的现有配置里就行):

# 监听FTP控制连接(默认端口21)
frontend ftp_control
    bind *:21
    mode tcp
    option tcplog
    default_backend ftp_servers

# 后端FTP服务器组,替换成你的pure-ftpd服务器IP
backend ftp_servers
    mode tcp
    balance roundrobin  # 负载均衡策略,按需调整,比如用source绑定固定客户端到固定服务器
    server ftp_node1 192.168.1.10:21 check  # 第一个pure-ftpd服务器
    server ftp_node2 192.168.1.11:21 check  # 第二个,有多台就继续加

# 关键!处理FTP被动模式的数据连接端口
frontend ftp_passive_data
    bind *:30000-30100  # 这个端口范围要和后面pure-ftpd的配置完全一致
    mode tcp
    option tcplog
    default_backend ftp_servers

为什么要这么配?因为FTP有两个连接:

  • 控制连接:用端口21,负责发送命令(比如登录、列出文件)
  • 数据连接:主动模式下由服务器发起,被动模式下由客户端发起,所以必须把被动端口范围也交给HAproxy转发,不然客户端连不上数据通道。

另外别忘了给HAproxy所在服务器的防火墙开放21端口和30000-30100这个范围!

2. 调整pure-ftpd的配置,固定被动端口

默认pure-ftpd会用随机被动端口,HAproxy没法提前转发这些随机端口,所以得让它用固定范围:

操作步骤:

  1. 找到pure-ftpd的配置文件,通常在/etc/pure-ftpd.conf或者/etc/pure-ftpd/pure-ftpd.conf
  2. 修改或添加这两行:
PassivePortRange          30000 30100  # 和HAproxy里的被动端口范围完全匹配
ForcePassiveIP            你的HAproxy公网IP  # 让pure-ftpd告诉客户端去连HAproxy的IP,而不是服务器自己的内网IP
  1. 重启pure-ftpd服务:systemctl restart pure-ftpd

3. 验证配置是否生效

  1. 先重启HAproxy:systemctl restart haproxy
  2. 在客户端用FTP工具(比如FileZilla或者命令行ftp)测试连接,分别试试主动和被动模式,看能不能正常列出文件、上传下载。

踩坑排查点

如果还是不行,先查这些:

  • 看HAproxy日志(默认在/var/log/haproxy.log),有没有FTP连接的报错信息
  • 确认pure-ftpd服务器的防火墙也开放了21和30000-30100端口
  • 如果你用的是云服务器,还要检查云服务商的安全组有没有开放这些端口

内容的提问来源于stack exchange,提问作者KızlarGelsin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:21:26