2017-10-16 73 views
0

我有一台只有Nginx和Docker的虚拟机。我从域名的加密中获得了证书。在码头集装箱内部,我安装了一个GitLab。现在我正尝试通过我的Nginx Proxy访问GitLab。Docker中的GitLab使用Nginx代理

我的问题是SSH访问GitLab,因为当我尝试通过Nginx中的流将SSH流量重定向到我的Docker时,我得到了错误“地址已被使用”。

在Docker中,我有一个类似于“127.240.0.1:22:22”的地址,而在Nginx中我使用proxy_pass在TCP端口22上从gitlab.xyz重定向到127.240.0.1:22。但是,这不会工作。

你有什么建议吗? 谢谢!

回答

1

不幸的是,这是行不通的。 HTTP(s)客户端发送一个主机头,表明他们正试图访问的地址(gitlab.xyz)。

对于原始TCP,没有Host头,因此无法找出哪个容器应该接收请求。

由于您的主机已经使用端口22/tcp,因此您将获得“地址已被使用”。

我们遇到了同样的问题,并为主机提供了DNS-Alias重定向的第二个IP。我们知道这个知识产权的所有连接都应该转到gitlab上。这意味着您甚至不需要反向代理,因为您可以直接将端口打开到容器中。 (-p new.gitlab.ip:22:22)

+0

您如何处理SSL?在gitlab码头里面? –

+0

我不太清楚我们如何处理它,因为我目前无法访问系统。但afaik仍然可以通过反向代理处理所有其他流量到gitlab,但SSH除外。您也可以通过卷将证书放入容器,并在容器内部使用nginx进行“正常”SSL处理(假设您使用的是综合安装)。 – samprog

+0

我尝试了您的方法来访问我的AWS EC2实例,但我总是收到错误:“bind:无法分配请求的地址”。语法类似于:“端口: - '1.2.3.4:1337:1337'”和1.2.3.4是例如我的AWS弹性IP –