Docker 中的 GitLab Omnibus 与裸 Apache 反向代理中的 GitLab Pages

Docker 中的 GitLab Omnibus 与裸 Apache 反向代理中的 GitLab Pages

我在 Docker 容器(Omnibus 安装)中托管 GitLab EE 实例(v11.9.0),并在其前面有一个 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.htmlhello 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,我会得到 GitLab 的 404 错误页面。

好的方面是,因此我非常确定将流量传递给页面守护程序可以正常工作 - 如果我用 停止页面守护程序gitlab-ctl stop gitlab-pages,404 页面就会消失,并且我会收到来自 Apache 的代理错误。糟糕的是,页面服务仍然无法按预期工作。

有没有人使用类似的设置来提供 GitLab 页面?

答案1

我终于弄清楚了问题所在。只需添加ProxyPreserveHost onApache 配置,一切就都正常了。我无法提供任何有关为什么这样做的详细信息,也许对 Apache 更有经验的人可以提供一些见解。

完整的 vHost 配置如下:

<VirtualHost *:80>

    ServerAlias *.customdomain.com

    <Location />       
        ProxyPreserveHost on
        ProxyPass http://localhost:9081/
        ProxyPassReverse http://localhost:9081/
    </Location>

</VirtualHost>

相关内容