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

Google Cloud Function部署后FTP控制套接字超时问题求解

问题排查&解决步骤

1. FTP协议模式配置错误

FTP默认使用双端口通信:21端口作为控制端口,另外需要单独的端口作为数据传输端口:

  • 被动模式(客户端默认模式):客户端需要额外连接FTP服务端开放的随机高位端口(通常是1024-65535区间的某一段),仅放行21端口会导致数据传输阶段卡住超时
  • 主动模式:服务端主动向客户端发起数据连接,Google Cloud Function默认禁止公网入站连接,完全无法使用

你需要先确认你的FTP服务端开放的被动端口范围,全程使用被动模式连接。

2. VPC公网出口配置遗漏

仅配置VPC连接器无法直接访问公网FTP站点:

  • Google Cloud VPC的内部IP默认没有公网访问权限,你需要在同VPC下配置Cloud NAT网关,绑定公网IP,让VPC连接器的流量可以通过NAT访问公网资源
  • 把Cloud NAT的出口公网IP添加到你的FTP服务端的白名单中,避免被服务端的访问控制规则拦截

3. 防火墙规则配置不全

  • 配置VPC出站防火墙规则:放行TCP 21端口+ FTP服务端的被动端口范围,目标地址填你的FTP站点公网IP,优先级设为高于默认拒绝规则
  • 不需要配置额外入站规则,FTP被动模式不需要服务端主动连接云函数

4. 云函数基础配置调整

  • 把云函数的超时时间从默认的60秒调整到最长9分钟,避免FTP连接、列表传输慢导致的超时
  • 确认VPC连接器和云函数在同一区域(你用的是europe-west3,连接器也必须部署在该区域),且连接器的带宽规格满足传输要求

调整后的代码示例

增加FTP连接超时配置、开启调试日志方便定位问题:

const ftp = require("basic-ftp");
const functions = require("firebase-functions");

const workingDirectory = "outgoing/";

exports.getAllFtp = functions
  .region("europe-west3")
  .https.onRequest(async (req, res) => {
    // 初始化客户端时设置30秒超时,避免无限制等待
    const client = new ftp.Client(30000);
    client.ftp.verbose = true; // 开启交互日志,可直接在云函数日志中查看FTP连接步骤卡住的节点

    try {
      await client.access({
        host: "ftp.myftpsite.xxx",
        user: "blah blah",
        password: "blah blah blah",
        // 强制使用被动模式
        passive: true
      });
      console.log(await client.list(workingDirectory));
      res.status(200).send("OK");
    } catch (err) {
      console.log("FTP连接错误:", err);
      res.status(500).send("FTP连接失败");
    } finally {
      // 确保无论请求成功失败都关闭连接,避免资源泄漏
      client.close();
    }
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:03