Мы создали GitLab сервер (GitLab 7.0 Community Edition).
Он запущен и работает, и наши коллеги могут использовать его в локальной сети (IP-адрес и хост видны только из локальной сети).
Некоторые проекты, размещенные на этом экземпляре GitLab, должны быть «общими» для внешних пользователей (не входящих в нашу компанию). Мы хотели бы предоставить им доступ к репозиториям Git, чтобы они могли клонировать, извлекать и отправлять.
Сервер GitLab останется в локальной сети. Но мы можем настроить сервер в нашей демилитаризованной зоне, который может использовать обратный прокси-сервер (или некоторые другие альтернативы) для сервера GitLab. Однако мы хотели бы, чтобы через HTTPS были доступны только URL-адреса ".git" (чтобы не предоставлять доступ к GitLab WUI (веб-интерфейс пользователя)).
Как мы можем настроить «обратный прокси» в демилитаризованной зоне, чтобы предоставить доступ внешним пользователям (в Интернете) к нашим внутренним репозиториям Git, размещенным на GitLab?
Пожелания:
https://*/*.git/*
URL-адреса должны быть разрешены извне;Примечание: у нас уже есть сервер в нашей DMZ с запущенным NGINX. Если бы мы могли использовать этот «программный стек» для обратного проксирования, это было бы здорово.
Примечание 2: за этот вопрос уже назначена награда в размере 100, срок действия которой истек, и баллы были потеряны. Если я получу ответ, который решит мою проблему, я открою награду и награжу ею ответ.
Вы пробовали очевидное наивное решение?
server { [...ssl and servername stuff...] location / { # fake the hostname to the hostname that gitlab expects # proxy_set_header Host hostname-for-gitlabhost; proxy_pass https://internal-gitlab-instance; proxy_read_timeout 90; } }
Кроме того, вы можете установить местоположение так, чтобы разрешить только
https: //...../*.gitURLs
Это должно работать:
Вместо того
location /above, something like:
location ~ ^/(.*\.git) { proxy_set_header Host hostname-for-gitlabhost; proxy_pass https://internal-gitlab-instance/$1; proxy_read_timeout 90; }
Это захватывает запрос-uri и добавляет его к вызову прокси с указанием местоположения.
Я не совсем уверен, работает ли это, просто набрал его с макушки.