web-dev-qa-db-ja.com

Apacheプロキシの背後でgitlabを使用すると、生成されたすべてのURLが間違っている

https://about.gitlab.com/downloads/ のデフォルトパッケージを使用してUbuntu 12.04でGitlabを設定しました

{明確にするために編集}

私は、ポート8888にインストールされたパッケージをプロキシしてnginxサーバーを実行するようにApacheを設定しました(そう思いました)。

Apacheがすでにインストールされているので、localhost:8888でnginxを実行する必要があります。問題は、すべての画像(アバターなど)がhttp://localhost:8888から提供されるようになり、Gitlabが提供するすべてのチェックアウトURLもローカルホストである-ドメイン名を使用する代わりにです。

そのURLを使用するように/etc/gitlab/gitlab.rbを変更すると、Gitlabが機能しなくなり、503が返されます。

それが実際にlocalhostで実行されている場合でも、GitlabにどのURLを世界に提示するかを伝える方法はありますか?

/etc/gitlab/gitlab.rbは次のようになります:

# Change the external_url to the address your users will type in their browser
external_url 'http://my.local.domain'
redis['port'] = 6379
postgresql['port'] = 2345
Unicorn['port'] = 3456

/opt/gitlab/embedded/conf/nginx.confは次のようになります:

server {
        listen       localhost:8888;
        server_name  my.local.domain;

[更新]

External_urlとしてlocalhost:8888を指定しない場合、nginxは引き続き間違ったポートでリッスンしているようです。 /var/log/gitlab/nginx/error.logで見つけました

2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2014/08/19 14:29:58 [emerg] 2526#0: still could not bind()

Apacheのセットアップは次のようになります。

<VirtualHost *:80>
  ServerName my.local.domain

  ServerSignature Off
  ProxyPreserveHost On

  AllowEncodedSlashes NoDecode

  <Location />
    ProxyPass http://localhost:8888/ 
    ProxyPassReverse http://127.0.0.1:8888
    ProxyPassReverse http://my.local.domain
  </Location>
</VirtualHost>

Gitlabがlocalhost:8888でリッスンしている場合は、すべてプロキシでプロキシされているようです。localhost:8888ではなく、Gitlabが正しいURLの表示を開始する必要があるだけです。

4
Hippyjim

Gitlabのgithub にあるドキュメントに従って:

# Copy the example GitLab config
Sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Make sure to change "localhost" to the fully-qualified domain name of your
# Host serving GitLab where necessary

Apacheが適切なプロキシヘッダーを送信していることも確認してください。

この場合、Apacheをプロキシに使用しているため、nginxの設定は関係ありません。削除するか、オフにしてください。

5
gparent

他の多くの投稿と巧妙なconf編集の間で石畳になっていることについて、誰もが明確な答えを持っていないのは非常に残念です。無駄にした2時間を節約するために、皆さんのためにすべてを1か所にまとめました。

私のセットアップは、多数のサイトをホストし、HTTPSをホストするApacheです。これは、gitlabを指すリバースプロキシとして構成しました。したがって、Apacheの安全なURLを指すように、gitlabが電子メールで生成する私のURLが必要です。これを行うには...

1:gitlab.rbファイルを編集...

CentOS 7では/opt/gitlab/embedded/cookbooks/gitlab/libraries/gitlab.rbにあります

と行を変更...

external_url nil

external_url "http://<yoururl>:81"

2:gitlab-ctl reconfigureを実行します

Nginxはポート81でホストしますが、電子メールで送信されるURLは「http://:81」のようになり、安全なApacheプロキシではありません。これを行うには...

3:生成されたRails gitlabの構成ファイルを編集します

CentOS 7では、これは/var/opt/gitlab/gitlab-Rails/etc/gitlab.ymlにあります

と行を変更...

## Web server settings (note: Host is the FQDN, do not include http://)
Host: <yoururl>
port: 81
https: false

## Web server settings (note: Host is the FQDN, do not include http://)
Host: <yoururl>
port: 443
https: true

4:gitlab-ctl restartを使用してgitlabを再起動します

次に、nginxが適切に起動することを確認します。必要に応じて、gitlab-ctl tail nginxを実行して、出力されるエラーを確認します。

警告:gitlab-ctl reconfigureを再度実行する場合は、この編集を再度行う必要があります。私は高低を検索しましたが、これをうまく再構成する方法でこれを行う方法は見つかりませんでした。これは、誰かがgitlabに追加を要求できる機能リクエストであり、かなりマイナーなものでなければなりません。オプションの変数「actual_url」。設定すると、生成されたURLに使用されます。

5:利益! :)

15
Farley

私は最後にnginxを無効にすることで構成されるこのドキュメントをたどり、Apacheインストールプロキシgitlabを許可しました。これは私にとってより理にかなっており、nginxプロキシを介してプロキシしようとすると、いくつかのアセットが:8081からまだロードされているという問題がありました。

http://ryansechrest.com/2015/08/use-Apache-instead-of-built-in-nginx-in-gitlab-ce/

vi /etc/gitlab/gitlab.rb

外部URLを設定する

external_url 'http://mygitlab.web.site/'

Wwwユーザーとグループを変更する

web_server['username'] = 'www-data'
web_server['group'] = 'www-data'

Nginxを無効にする

nginx['enable'] = false

Gitサーバーのポートを設定します(ファイルの最後に)

gitlab_git_http_server['listen_network'] = "tcp"
gitlab_git_http_server['listen_addr'] = "localhost:8282"

Gitlabを再構成する

gitlab-ctl reconfigure

仮想ホスト構成を変更する

<VirtualHost *:80>
  ServerName git.domain.com
  DocumentRoot /opt/gitlab/embedded/service/gitlab-Rails/public

  ProxyPreserveHost On
  AllowEncodedSlashes Off

  <Location />
    Order deny,allow
    Allow from all
    ProxyPassReverse http://127.0.0.1:8080
    ProxyPassReverse http://git.domain.com/
  </Location>

  RewriteEngine on
  #Don't escape encoded characters in api requests
  RewriteCond %{REQUEST_URI} ^/api/v3/.*
  RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA,NE]

  #Forward all requests to gitlab-workhorse except existing files like error documents
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_URI} ^/uploads/.*
  RewriteRule .* http://127.0.0.1:8282%{REQUEST_URI} [P,QSA]
</VirtualHost>

Gitlabを再起動します

gitlab-ctl restart
4
Yann Bizeul

私はこの問題にも遭遇しましたが、Apacheプロキシが原因ではありません。私のインストールは、ホストコンピューターから仮想マシンへの単純なポート転送でした。このソリューションは、ポート転送とプロキシのすべての方法で機能します。 OS間で異なる可能性があるのは、Gitlab構成ファイルの場所だけです。 Gitlab 7.8.4でDebian 7.8を使用しています

短い答え

/etc/gitlab/gitlab.rbで次の変更を行います:

  • external_url'http://gitlab.example.com/'から'http://gitlab.example.com:8080'に変更します
  • nginx['custom_gitlab_server_config'] = "listen *:80;"を追加

最終メモ:-GitlabのNginxは、「内部」マシンの:8080で実行できません(プロキシ/ポートフォワードが指すもの)


長い答え

これには、私のセットアップとソリューションを見つけるプロセスに関する背景情報が含まれます

私のセットアップ:

  • computer.local:ホストコンピュータ

    • ポート8080をcomputer-vm.local:80に転送します
    • ポート2222をcomputer-vm.local:22に転送します
  • computer-vm.local:Gitlabおよびその他のソフトウェアがインストールされているDebian仮想マシン。これはVM=ブリッジネットワークを使用しないため、外部からアクセスできるポートはすべてホストコンピュータから転送する必要があります。

注:Sudo gitlab-ctl reconfigureを変更するたびに/etc/gitlab/gitlab.rbを実行しました

そのダウンロードページ にある標準のインストール手順を使用して、Gitlabインスタンスにcomputer.local:8080でアクセスできました。アカウントの作成に進みましたが、送信された電子メールリンクはURL http://computer-vm.local/users/confirmation?confirmation_token=...を使用しており、ホストマシン以外のコンピューターからはアクセスできませんでした。 external_url/etc/gitlab/gitlab.rbhttp://computer-vm.localからhttp://computer.local:8080に変更すると、Gitlabに完全にアクセスできなくなります。ホストからhttp://computer-vm.local:8080に移動すると、「502:Gitlabが応答していません」というエラーが発生しました。調査の結果、ユニコーンはlocalhost:8080をリッスンしようとしていたようです。そのため、NginxとUnicornが同じポートで争っていたため、Nginxが戦いに勝利しましたが、Gitlabは役に立たなくなりました。 external_urlhttp://computer.local:8081に変更すると、http://computer-vm.local:8081からアクセスできるGitlabでの502エラーが解決されました。しかし、それは唯一の問題です...

変更したくないポート転送のため、GitlabにそのURLを'http://computer.local:8080'としてアドバタイズする必要がありました。そのため、external_urlhttp://computer.local:8080に戻りました。 NginxオプションについてのGitlabドキュメント here を見ると、完全なGitlab外部URL(以前のバージョンのオプション)を変更せずにNginxポートを変更する方法についての言及はありません。ただし、Gitlabでは、ユーザーがnginx['custom_gitlab_server_config']オプションを介してNginxに任意のオプションを渡すことができます。以下を/etc/gitlab/gitlab.rbファイルに追加しました:

nginx['custom_gitlab_server_config'] = "listen *:80;"

Gitlabを再構成した後、出来上がり! http://computer.local:8080からアクセスでき、パスワードリセットリンクを送信するとき、およびgit cloneリンクを表示するときに正しいドメインが含まれます。

また、ポート転送の状況により、gitlab_Rails['gitlab_Shell_ssh_port']22から2222に変更する必要がありましたが、必ずしもそうする必要はありません。

私の最後の/etc/gitlab/gitlab.rb

external_url "computer.local:8080"
gitlab_Rails['gitlab_Shell_ssh_port'] = 2222
nginx['custom_gitlab_server_config'] = "listen *:80;"
2
computergeek125

私は同じ問題を抱えていました

external_url 'http://my.local.domain'

external_url 'http://my.local.domain:8888'

gitlab構成を再生成すると、nginx構成が修正されます。 Apacheプロキシは、8888が再び取り除かれるようにリンクを修正する必要があります。

これが役立つことを願って、私はgitlabを既存の環境から削除し、既存のセットアップでは(私の意見では)ナイスを再生しないので、gitlabのクリーンなvmを起動します。

1
ahmeij

デフォルトのポート番号を変更する非常に簡単な方法

run- gitlab-ctl stop

centosまたはlinuxでファイルを編集します:-/var/opt/gitlab/nginx/conf/gitlab-http.conf

リッスン変更*:80;例:90

その後

コマンドを実行しないでください-gitlab-ctl reconfigure

Gitlab-ctlを再構成する場合、デフォルトでgitlabを構成し、変更を削除します。

したがって、run- gitlab-ctl startのみ

0
Rahul Jain

これを見つけた他の人のために、サポートするために:

  • 別のポートでNginxを実行する
  • GitLabで相対URLを使用する

このサンプルのProxyPass構成を考えます。

ProxyPass /gitlab http://localhost:81/gitlab
ProxyPassReverse /gitlab http://localhost:81/gitlab


gitlab.rbの2つのパラメーターを編集して再構成します。手順:

  1. /etc/gitlab/gitlab.rbを編集します。
    変化する: external_url 'http://my.local.domain/gitlab'
    宛先:external_url 'http://my.local.domain/'

  2. /etc/gitlab/gitlab.rbを編集します
    変化する: # nginx['listen_port'] = nil
    宛先:nginx['listen_port'] = 81

  3. コマンドを実行:gitlab-ctl reconfigure

できました。

0
Ronny Pettersen