如何根据请求的域

时间:2016-11-04 14:39:43

标签: ubuntu docker ssh proxy portforwarding

我的服务器运行Ubuntu 16.04并安装了Docker引擎。

在一个容器中我运行GitLab服务(当然还有许多其他容器与其他东西)。我们称之为Docker网络地址GITLAB_IP

我使用nginx-proxy根据VIRTUAL_HOST环境变量代理来自外部的HTTP请求。

设置了DNS,因此针对*.mydomain.com的所有内容都转到mydomain.com,并在同一主机上解析。

mydomain.com的请求由我的主nginx容器提供,而发送到gitlab.mydomain.com的请求由我的GitLab容器提供。

端口80(和443)上的一切都运行良好。

现在我希望能够在ssh上使用git。我想要实现的是,如果我这样做

> ssh mydomain.com

我将最终进入主机服务器的终端。如果我做了

> ssh gitlab.mydomain.com

然后我想在GitLab容器的终端中结束。

我知道我可以在主机上的一些未使用的端口上映射容器的端口22,因此我可以通过ssh-ing访问容器,例如。端口10022,但我更喜欢干净清晰。

有没有办法让主机上的ssh服务器在检测到特定域时以某种方式充当代理?

1 个答案:

答案 0 :(得分:1)

与启用HTTP或SNI的TLS服务不同,SSH服务没有任何基于名称的逻辑检测。

它的长短是每个ip /端口都有一个ssh守护进程。

有一些可行的解决方法。

港口敲门是一种可能性。您可以根据发送的敲门声更改防火墙转发给您的服务。

您可以做的另一件事是设置一个.ssh / authorized_keys文件,该文件将识别您使用的SSH密钥,然后强制执行一个命令,该命令将启动一个新的ssh进程并让您使用正确的相应服务。

您还可以在不同的端口上运行每个ssh服务,并让客户端配置文件处理name->端口映射。