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

如何配置Nginx实现server2的22端口流量转发到server1的SFTP服务

问题排查与解决方案

现有配置的核心错误

  • 协议不匹配:SFTP是基于SSH的四层TCP协议,你使用的是Nginx七层HTTP代理模块,无法识别、转发非HTTP/HTTPS协议的SFTP流量,配置逻辑从底层就不成立。
  • 配置规则冲突:你在server块首行配置了return 301 https://google.com,所有匹配到的请求会直接跳转,永远不会执行下方的location代理规则。
  • 端口逻辑错误:你配置的监听规则归属HTTP块,仅能处理HTTP协议请求,无法接收SFTP的TCP流量。

正确配置方案

你需要使用Nginx的stream模块做四层TCP流量转发,步骤如下:

1. 前置检查

  • 执行ss -tulpn | grep :22检查server2的22端口占用:如果是server2自身的SSH服务(sshd)占用了22端口,需修改/etc/ssh/sshd_config中的SSH端口为其他值(如2222),重启sshd服务释放22端口。
  • 验证server2到server1私网连通性:执行nc -zv server1-private-ip 22确认网络连通,无安全组、防火墙拦截。
  • 确认你的Nginx Docker镜像已编译stream模块(官方Nginx镜像默认已包含该模块)。

2. 调整Nginx配置

删除你之前写在http块内的错误server块,新增与http块平级的stream块配置,示例如下:

# 与http块平级,不能写在http块内部
stream {
    server {
        listen 22;
        proxy_pass server1-private-ip:22;
        # 可选优化配置:延长SFTP连接超时时间
        proxy_timeout 1h;
        proxy_connect_timeout 10s;
    }
}

3. 调整Docker启动参数

启动Nginx容器时增加22端口映射:

docker run -d -p 80:80 -p 22:22 你的其他启动参数 nginx:latest

如果你用docker-compose,在ports配置中新增- "22:22"即可。

4. 验证配置

重启Nginx容器后,用FileZilla连接server2的公网/私网IP的22端口,即可正常访问SFTP服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:51:00