GitLab Pages с GitLab Omnibus в Docker + голый обратный прокси-сервер Apache
Я размещаю экземпляр 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.
Хорошо, что я уверен, что передача трафика на демон страниц работает правильно - если я остановлю демон страниц с помощью 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>