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

能否通过NGINX将FTP请求转发至其他IP实现文件上传?

可行性结论

该需求完全可以实现,但注意不能用NGINX默认的HTTP七层代理逻辑配置,需要通过stream四层代理模块实现,同时适配FTP协议的双连接特性。

前置准备
  • 检查VM1上的NGINX是否已包含stream模块:执行nginx -V 2>&1 | grep stream,输出带--with-stream参数即为支持,否则需要重新编译NGINX添加该模块,或安装带stream模块的NGINX发行包。
  • 调整VM2上的FTP服务配置(以常用的vsftpd为例):
    • 固定被动模式端口范围,例如设置pasv_min_port=50000、pasv_max_port=50100
    • 将被动模式通告IP改为VM1的地址:pasv_address=192.168.1.10
    • 保存配置后重启FTP服务生效
  • 放开VM1本地防火墙的21端口、50000-50100端口段的入站规则。
可用配置参考

注意stream配置块属于NGINX顶层配置,和http{}块平级,不要写入http块内部:

stream {
    upstream ftp_server {
        server 192.168.1.11:21 fail_timeout=0;
    }
    # 转发FTP控制连接
    server {
        listen 21;
        proxy_pass ftp_server;
        proxy_connect_timeout 5s;
        proxy_timeout 300s;
    }
    # 转发固定范围的被动模式数据连接
    server {
        listen 50000-50100;
        proxy_pass 192.168.1.11:50000-50100;
    }
}
配置生效与验证
  1. 将上述配置写入NGINX配置文件(可以单独写在/etc/nginx/stream-conf.d/目录下的.conf文件,只要主配置包含该目录加载规则即可)
  2. 执行nginx -t检查配置语法,确认无报错后执行nginx -s reload重载配置
  3. 直接通过FTP客户端连接192.168.1.10:21,即可正常完成认证、文件上传操作,流量会全部经过VM1转发到后端VM2的FTP服务。
补充说明
  • 如果你使用的是商业版NGINX Plus,自带FTP协议感知的动态代理能力,不需要手动固定被动端口范围,模块会自动解析控制连接里的端口协商信息,动态转发数据端口流量,配置更简单。
  • 不要尝试在HTTP server块里配置FTP代理,HTTP和FTP是完全不同的应用层协议,七层HTTP代理无法处理FTP的握手、认证、传输逻辑。

内容的提问来源于stack exchange,提问作者Alfred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:48:23