Я размещаю экземпляр GitLab EE (v11.9.0) в контейнере Docker (установка Omnibus) и имею обратный прокси Apache (не в Docker) перед ним для обработки SSL. Теперь я хотел бы обслуживать статические страницы для некоторых проектов с помощью функциональности GitLab Pages, что оказалось немного сложно с настройкой Docker.
я следуюэто официальное руководствочтобы мои страницы обслуживались под http://namespace.customdomain.com/projectname
. Я добавил подстановочные записи DNS и повозился с gitlab.rb
; вот соответствующие изменения:
pages_external_url "http://customdomain.com/"
gitlab_pages['enable'] = true
gitlab_pages['external_http'] = ['0.0.0.0:81']
gitlab_pages['inplace_chroot'] = true
pages_nginx['enable'] = true
gitlab_rails['pages_path'] = "/var/opt/gitlab/gitlab-rails/shared/pages"
(Я знаю, что некоторые из приведенных выше изменений не соответствуют инструкциям из руководства. Но они тоже не сработали, поэтому я пошел дальше и много пробовал, вот лишь текущее состояние.)
Порт 81 сопоставлен с портом 9081 хост-машины, и Apache имеет запись виртуального хоста для передачи туда трафика:
<VirtualHost *:80>
ServerAlias *.customdomain.com
<Location />
ProxyPass http://localhost:9081/
ProxyPassReverse http://localhost:9081/
</Location>
</VirtualHost>
Я использовал .gitlab-ci.yml
в примере проекта для создания простого веб-сайта, который представляет собой просто файл index.html
с hello world
в нем. Этот файл правильно помещен в /var/opt/gitlab/gitlab-rails/shared/pages/[namespace]/[project]/public/index.html
.
В [Project]/Settings/Pages
GitLab мне сообщает: «Поздравляю! Ваши страницы обслуживаются под: http://namespace.customdomain.com/project
«.
Если я теперь попытаюсь посетить страницу под http://namespace.customdomain.com/project
, я получу страницу ошибки 404 GitLab.
Хорошо то, что я, таким образом, почти уверен, что передача трафика на page daemon работает правильно – если я останавливаю pages daemon с помощью gitlab-ctl stop gitlab-pages
, страница 404 исчезает, и я получаю ошибку прокси от Apache. Плохо то, что обслуживание страниц все еще не работает так, как ожидалось.
Удалось ли кому-нибудь обслуживать страницы GitLab, используя подобную настройку?
решение1
Я наконец понял, в чем проблема. Просто добавьте ProxyPreserveHost on
конфигурацию Apache, и все будет работать отлично. Я не могу предоставить никаких подробностей о том, почему это сработало, возможно, кто-то более опытный с Apache сможет дать некоторые соображения.
Полная конфигурация vHost выглядит так:
<VirtualHost *:80>
ServerAlias *.customdomain.com
<Location />
ProxyPreserveHost on
ProxyPass http://localhost:9081/
ProxyPassReverse http://localhost:9081/
</Location>
</VirtualHost>