Docker での GitLab Omnibus を使用した GitLab Pages + ネイキッド Apache リバース プロキシ

Docker での GitLab Omnibus を使用した GitLab Pages + ネイキッド Apache リバース プロキシ

私は、Docker コンテナ (Omnibus インストール) で GitLab EE インスタンス (v11.9.0) をホストしており、SSL を処理するためにその前に Apache リバース プロキシ (Docker 内ではない) を配置しています。現在、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サンプル プロジェクトで を使用し、単純な Web サイトを作成しました。これは のみで構成されています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

ようやく問題が何なのか分かりました。ApacheProxyPreserveHost onの設定を追加するだけで、すべてがうまく動作します。なぜこれがうまくいったのか、詳しいことはわかりませんが、Apache に詳しい人なら何かヒントを与えてくれるかもしれません。

完全な vHost 構成は次のようになります。

<VirtualHost *:80>

    ServerAlias *.customdomain.com

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

</VirtualHost>

関連情報