我们已经建立了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 并将其添加到位置声明中的代理调用中。
我不太确定这是否有效,只是凭着脑子想出来的。