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

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

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

它已启动并运行,我们的同事可以在局域网内使用它(IP 地址和主机仅在局域网内可见)。

此 GitLab 实例上托管的某些项目应与外部用户(不属于我们公司)“共享”。我们希望让他们访问 Git 存储库,以便能够进行克隆、拉取和推送。

GitLab 服务器将保留在 LAN 内。但我们可以在 DMZ 中设置一个服务器,该服务器可以反向代理(或其他替代方法)GitLab 服务器。但是我们希望只有“.git”URL 可以通过 HTTPS 访问(因此不提供对 GitLab WUI(Web 用户界面)的访问权限)。

我们如何在 DMZ 中设置“反向代理”,以便外部用户(在互联网上)可以访问我们在 GitLab 上托管的内部 Git 存储库?

愿望:

  • https://*/*.git/*应允许外部访问 URL;
  • 反向代理上的 HTTP 基本身份验证将是一个优点;
  • 但通过 HTTPS 的 GitLab 身份验证机制将保留;
  • 我们局域网上的本地用户仍然应该能够使用 SSH 进行 Git 操作;
  • GitLab Web UI 不应被外部访问;

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

注2:这个问题已经有100的悬赏金,但已经过期,积分也丢失了。如果我得到一个能解决我问题的答案,我会开一个悬赏金并奖励答案。

答案1

您是否尝试过明显简单的解决方案?

服务器 {

 [...ssl 和服务器名称内容...]  

 地点 / {
    # 将主机名伪装成 gitlab 期望的主机名
    #
    proxy_set_header 主机主机名-for-gitlabhost;             
    proxy_pass https://内部-gitlab-instance;
    代理读取超时90;
 }  
}

此外,您可以将位置设置为仅允许

https://....../*.git
网址

这应该有效:

代替

地点 /
上面的例子是:

位置 ~ ^/(.*\.git) {
   proxy_set_header 主机主机名-for-gitlabhost;             
   proxy_pass https://internal-gitlab-instance/$1;
   代理读取超时90;
}

这将捕获请求 URI 并将其添加到位置声明中的代理调用中。

我不太确定这是否有效,只是凭着脑子想出来的。

相关内容