我在 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.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
,我会得到 GitLab 的 404 错误页面。
好的方面是,因此我非常确定将流量传递给页面守护程序可以正常工作 - 如果我用 停止页面守护程序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>