【问题标题】:How to reroute SFTP traffic via NGINX如何通过 NGINX 重新路由 SFTP 流量
【发布时间】:2016-02-18 03:37:53
【问题描述】:

我正在尝试设置一个 FTP 子域,以便所有传入的 SFTP 请求(例如)ftp.myname.com 都通过端口 22 路由到特定的内部服务器(例如)10.123.456。

如何使用 nginx 路由此流量?

我已经设置了 SFTP 服务器,可以直接 SFTP 到服务器,比如:

sftp username@123.456.7890,可以正常使用。

问题是,当我设置 nginx 以将所有流量路由到 ftp.myname.com 时,它会连接,但密码被拒绝。我将网络流量路由到我的其他子域没有问题,比如 dev.myname.com(带密码),但它不适用于 SFTP 流量:

server {
    listen 22;
    server_name ftp.myname.com;
    return .............
}

如何定义返回字符串以使用密码路由流量?

连接是 SFTP(通过端口 22)。

谢谢

【问题讨论】:

  • 请注意:sftp 使用 ssh-server 连接。如果您将 nginx 定义为侦听端口 22,则它需要到此端口的 http / https 连接。在我个人看来,您不能将发送到 nginx 的 sftp 请求转发到 ssh-server。检查您的服务侦听的端口,因此 ssh-server(用于 sftp 连接)可能已经在 port22 上侦听以接受连接。您可以通过 ufw 限制到端口 22 的连接。要获得一个只监听 22 端口的特殊子域,其他人可能会提供帮助。

标签: nginx ftp sftp


【解决方案1】:

向@peixotorms 表示:是的,你可以。 nginx 可以代理/负载平衡 http 以及 tcp 和 udp 流量,请参阅 nginx 流模块文档(nginx main documentation page),特别是stream core module's documentation

【讨论】:

  • (这篇文章似乎没有为问题提供quality answer。请编辑您的答案,或者将其作为对问题的评论发布)。
【解决方案2】:

您不能在 nginx 上执行此操作(仅限 http),您必须使用 HaProxy 之类的东西和一个简单的 dns 记录,以便您的子域指向服务器 ip。

一些信息:http://jpmorris-iso.blogspot.pt/2013/01/load-balancing-openssh-sftp-with-haproxy.html

编辑:

从 nginx 版本 1.15.2 开始,现在可以使用变量 $ssl_preread_protocol 来做到这一点。官方博客添加了关于如何使用此变量在同一端口上多路复用 HTTPS 和 SSH 的帖子。 https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/

在上游块上配置 SSH 的示例:

stream {
    upstream ssh {
        server 192.0.2.1:22;
    }

    upstream sslweb {
        server 192.0.2.2:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" sslweb;
    }

    # SSH and SSL on the same port
    server {
        listen 443;
        proxy_pass $upstream;
        ssl_preread on;
    }
}

【讨论】:

  • 有没有办法组合 SSH、HTTPS 和 HTTP ?我可以通过 ssl_preread 所有这三个来实现吗?
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多