У меня есть сервер, на котором я хочу запустить GitLab вместе с другими сервисами. После некоторого времени поисков в Google я обнаружил, что мне нужно проделать несколько трюков с mod_proxy, чтобы Apache2 пересылал запросы в GitLab. Но теперь, когда я пытаюсь получить доступ к любому URL-адресу на сервере, который не является URL-адресом GitLab в / git, я просто получаю сообщение об ошибке. Я даже не могу получить доступ к стандартной странице apache index.html, которую я явно должен. Сервер работает под управлением Ubuntu 14.04 LTS. Файл конфигурации для gitlab:
#This configuration has been tested on GitLab 6.0.0 and GitLab 6.0.1
#Note this config assumes unicorn is listening on default port 8080.
#Module dependencies
# mod_rewrite
# mod_proxy
# mod_proxy_http
<VirtualHost *:80>
ServerName lmmweb
ServerSignature Off
ProxyPreserveHost On
# Ensure that encoded slashes are not decoded but left in their encoded state.
# http://doc.gitlab.com/ce/api/projects.html#get-single-project
AllowEncodedSlashes NoDecode
<Location /git>
# New authorization commands for apache 2.4 and up
# http://httpd.apache.org/docs/2.4/upgrading.html#access
Require all granted
ProxyPassReverse http://127.0.0.1:8080
</Location>
#apache equivalent of nginx try files
# http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
# http://stackoverflow.com/questions/10954516/apache2-proxypass-for-rails-app-gitlab
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/git/%{REQUEST_FILENAME} !-f
RewriteRule /git/.* http: // 127.0.0.1 :8080%{REQUEST_URI} [P,QSA]
# needed for downloading attachments
DocumentRoot /home/git/gitlab/public
#Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
ErrorDocument 404 /404.html
ErrorDocument 422 /422.html
ErrorDocument 500 /500.html
ErrorDocument 503 /deploy.html
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
ErrorLog /var/log/apache2/gitlab/error.log
</VirtualHost>
Я почти уверен, что внутри RewriteRules должен быть сбой, но не могу его найти. Я включил двойные пробелы в RewriteRule для http: // ... так как я получаю некоторую ошибку из-за отсутствия репутации.
С уважением и благодарностью за вашу помощь.
Я нашел решение этого:
Проблема в том, что переопределяет все другие определенные vhosts. Для моей настройки было необходимо, чтобы этот экземпляр gitlab работал под другим портом, а затем прокси на этот порт из основной конфигурации.
Итак, мой vhost сейчас <VirtualHost:8081>
и перед Listen 8081
. В конфигурационном файле, где я хотел настроить субурлы, я добавил:
<Location /git>
ProxyPass http://mydomain:8081/git
ProxyPassReverse http://mydomain:8081/git
</Location>
По совпадению я решил проблему за несколько минут до того, как увидел ваш ответ, но это не конец истории. Бывает, что при создании новых проектов (а может, и в других местах) Gitlab все равно сообщает http
вместо того https
протокол для сгенерированных URL-адресов. И один, например, хотел бы получить доступ к серверу gitlab nginx (при использовании установки Omnibus, как кажется, здесь так) только как localhost в проходе обратного прокси. Для этого вам понадобится следующая конфигурация Apache:
ProxyPreserveHost On
<Location /gitlab>
ProxyPass http://localhost:8929/gitlab
ProxyPassReverse http://localhost:8929/gitlab
# Necessary so Gitlab can return https addresses on some generated URLs
RequestHeader set X-FORWARDED-PROTOCOL https
RequestHeader set X-Forwarded-Ssl on
</Location>
Следующие переменные затем должны быть введены в среду Gitlab или записаны в gitlab.rb
, поэтому доступ к сервису можно получить только как localhost:
external_url 'http://localhost:8929/gitlab'
# nginx['listen_port'] = 80 # I use this when mapping host 8929 to 80 in docker container
nginx['listen_https'] = false
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# Following is necessary otherwise Gitlab will generate git URLs pointing to localhost
gitlab_rails['gitlab_ssh_host'] = 'git.myexeternaldomain.com'