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

DigitalOcean App Platform部署Node应用外发SFTP请求超时问题

DigitalOcean App Platform SFTP握手超时解决方案

首先排除DigitalOcean侧端口拦截的可能性:DigitalOcean App Platform默认仅限制入站流量,仅开放80/443端口供外部访问,不会拦截任何主动外发的TCP请求,包括SFTP默认的22端口,不需要你手动在DigitalOcean侧开放端口。

第一步:调整SFTP连接配置

本地网络延迟低,默认超时配置可以正常运行,但云环境跨网访问延迟更高,首先修改sftp-sync-deploy的初始化参数,延长超时阈值,同时补全必要配置:

const sftpSync = require('sftp-sync-deploy');

const deployConfig = {
  host: 'homeXXXXXXX.1and1-data.host',
  port: 22, // 确认你的SFTP服务商提供的实际端口,部分服务商不会用默认22端口
  username: 'SFTP用户名',
  password: 'SFTP密码/或配置密钥路径',
  localDir: '/workspace/ixrs',
  remoteDir: '/', // 你当前配置为空,建议填写明确的远程绝对路径避免解析异常
  // 新增超时配置,适配云环境网络延迟
  readyTimeout: 60000, // SSH握手超时设为60秒
  connectTimeout: 30000 //  TCP连接超时设为30秒
};

修改配置后重新部署测试,如果还是超时进入下一步排查。

第二步:排查目标SFTP服务器IP限制

绝大多数该场景下的超时都是由目标SFTP服务器的IP白名单规则导致的:

  • 你本地可以正常连接是因为本地公网IP已经被加入1&1的SFTP服务白名单
  • DigitalOcean App Platform的出口IP是动态分配的,没有固定IP,默认不在目标服务的白名单内
  • 可以先临时关闭1&1 SFTP服务的IP访问限制,测试连接是否正常,如果可以正常连接,确认是该问题导致

如果需要保留IP限制,可以查询DigitalOcean对应部署区域的公网出口IP段,全部加入1&1的白名单即可。

第三步:网络连通性验证

如果关闭IP限制后仍然超时,可以在Node代码中添加端口连通性测试代码,确认网络链路是否正常:

const net = require('net');
const testClient = new net.Socket();
testClient.setTimeout(15000);

testClient.connect(22, 'homeXXXXXXX.1and1-data.host', () => {
  console.log('SFTP端口22连通正常,问题出在SSH握手阶段');
  testClient.destroy();
});

testClient.on('error', (err) => {
  console.log('SFTP端口连接失败:', err.message);
});

testClient.on('timeout', () => {
  console.log('SFTP端口连接超时,链路被拦截');
  testClient.destroy();
});

部署后查看应用日志,根据输出定位具体问题。

备选方案

如果目标服务商无法关闭IP白名单也不允许添加大段IP段,可以在同区域开通一个最小配置的DigitalOcean Droplet,配置固定IP后加入白名单,将App Platform的SFTP请求通过该Droplet转发即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:36:00