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

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

我在 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.htmlwith 。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 onApache 配置即可,一切正常。我無法提供任何關於為什麼會成功的細節,也許對 Apache 更有經驗的人可以提供一些見解。

完整的 vHost 配置如下所示:

<VirtualHost *:80>

    ServerAlias *.customdomain.com

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

</VirtualHost>

相關內容