
我在 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
with 。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>