Назад | Перейти на главную страницу

Как правильно настроить Apache mod_proxy для GitLab под suburl в сочетании с другими suburl

У меня есть сервер, на котором я хочу запустить 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'