如何仅提供外部访问Git项目(克隆/拉/推)的内部GitLab部署

我们已经build立了一个GitLab服务器 (GitLab 7.0社区版)。

它正在运行,我们的同事可以在局域网内使用它(IP地址和主机只能从局域网中看到)。

一些在这个GitLab实例上托pipe的项目应该与外部用户(不是我们公司的一部分)“共享”。 我们希望让他们访问Git仓库,以便克隆,拉和推。

GitLab服务器将停留在局域网内。 但是我们可以在我们的DMZ中设置一个服务器,这个服务器可以反向代理GitLab服务器。 然而,我们希望只能通过HTTPS访问“.git”URL(所以不能访问GitLab WUI(Web用户界面))。

我们如何在DMZ中设置“反向代理”来为外部用户(在互联网上)提供对我们在GitLab上托pipe的内部Git仓库的访问?

愿望:

  • 只有https://*/*.git/*url应该被允许在外面;
  • 反向代理上的HTTP基本authentication将是一个加号;
  • 但是通过HTTPS的GitLabauthentication机制应该保留;
  • 本地局域网用户仍然可以使用SSH进行Git操作;
  • GitLab Web用户界面不应该从外部访问;

注意:我们在运行NGINX的DMZ中已经有了一台服务器。 如果我们可以使用这个“软件堆栈”来做反向代理,那就太好了。

注2:这个问题已经有了一个已经过期的100分的奖励,而且分数已经丢失了。 如果我得到一个解决我的问题的答案,我会打开一个赏金,并奖励它的答案。

你有没有尝试过这种显而易见

服务器{

  [... ssl和servername的东西...]  

 位置 / {
     #将主机名伪装成gitlab期望的主机名
     #
     proxy_set_header主机hostname-for-gitlabhost;             
     proxy_pass https:// internal-gitlab-instance;
     proxy_read_timeout 90;
  }  
 }

另外,你可以将位置设置为只允许的位置

  https://...../ * .git 

url

这应该工作:

代替

 位置 / 

上面,有点像:

位置〜^ /(。* \。git){
    proxy_set_header主机hostname-for-gitlabhost;             
    proxy_pass https:// internal-gitlab-instance / $ 1;
    proxy_read_timeout 90;
 }

这捕获了request-uri,并使用location语句将其添加到代理调用中。

我不确定这是否有效,只需从头顶input即可。