![如何仅向内部 GitLab 部署的 Git 项目(克隆/拉取/推送)提供外部访问](https://linux22.com/image/637882/%E5%A6%82%E4%BD%95%E4%BB%85%E5%90%91%E5%86%85%E9%83%A8%20GitLab%20%E9%83%A8%E7%BD%B2%E7%9A%84%20Git%20%E9%A1%B9%E7%9B%AE%EF%BC%88%E5%85%8B%E9%9A%86%2F%E6%8B%89%E5%8F%96%2F%E6%8E%A8%E9%80%81%EF%BC%89%E6%8F%90%E4%BE%9B%E5%A4%96%E9%83%A8%E8%AE%BF%E9%97%AE.png)
我们已经建立了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 并将其添加到位置声明中的代理调用中。
我不太确定这是否有效,只是凭着脑子想出来的。