GitLab Pages с GitLab Omnibus в Docker + чистый обратный прокси Apache

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/PagesGitLab мне сообщает: «Поздравляю! Ваши страницы обслуживаются под: 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>

Связанный контент