我正在尝试设置一个FTP子域,这样所有传入(比如说) ftp.myname.com的SFTP请求都会通过端口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)。
谢谢
发布于 2018-06-22 15:42:20
@peixotorms:是的,你可以。nginx可以代理/负载平衡http以及tcp和udp流量,请参阅nginx流模块文档(位于nginx main documentation page),特别是stream core module's documentation。
发布于 2016-02-18 23:16:24
你不能在nginx (仅限http)上这样做,你必须使用类似HaProxy的东西,并为你的子域创建一个指向服务器ip的简单dns记录。
部分信息: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;
}
}https://stackoverflow.com/questions/35472363
复制相似问题