我遇到了一些反向端口隧道服务,比如
http://progrium.com/localtunnel.我知道他们允许我轻松设置一个反向SSH端口隧道,这让我可以在线显示我的本地Web服务器(例如我在端口3000本地运行Rails应用程序,并使用localtunnel的服务,我可以通过xhd3s.localtunnel.com等网站与在线人员分享.)
不过,我对这是如何工作有点困惑.设置远程隧道时,必须指定要接管的远程端口,这意味着远程服务器上每个端口有一个隧道.但是,使用这些端口隧道服务,每个人都指定相同的远程端口.唯一的区别是标记化的子域.
他们如何使用标记化的子域并使用相同的端口将其转换为唯一的隧道?我怀疑有一些网络服务器魔法在玩,但我不太确定这是如何工作的.
编辑:
换句话说,我希望能够从两台不同的计算机发出这些命令:
# first computer
ssh -R 9000:localhost:3000 jim@xcvs.myserver.com
# second computer
ssh -R 9000:localhost:3000 john@csde.myserver.com
我在myserver.com上做什么来允许这两个反向端口隧道在端口9000上运行?
最佳答案 我花了一些时间来讨论这个问题.我现在相信远程SSH隧道全部设置为与远程服务器上的相同端口一起工作的前提是错误的.
但在尝试了一些概念验证之后,我想我隐约知道他们在做什么.
我假设SSH隧道都使用相同的端口,因为所有与子域URL的连接都可能发生在端口80上.但是,如果您在Web服务器中设置代理传递,则可以将流量转发到其他端口上.服务器.
以下是Nginx代理传递的概念证明:
server {
listen 80;
server_name xcvs.myserver.com;
location / {
proxy_pass http://127.0.0.1:5222;
}
}
server {
listen 80;
server_name csde.myserver.com;
location / {
proxy_pass http://127.0.0.1:5223;
}
}
因此,端口80上这两个不同子域的流量被代理到不同的端口,然后您可以使用它们来设置SSH隧道.
不过,在设置中仍然有一些神秘感.使用localtunnel等服务设置隧道时,可以发出如下命令:
$localtunnel 3000
我认为这是命中服务器,获取新的端口号和子域对,然后为您发出带有这些值的远程SSH隧道命令.
但是,我有点不清楚如何自动创建子域并将其映射到端口,以便Web服务器知道如何正确代理.我在工作中闻到一个周末项目. 🙂