複数のVMを持つサーバーがあり、その1つは正しいドメインを正しいポートの正しいVMに接続するプロキシです。
- 標準のdocker-composeファイルを使用してgitlab-ceとgitlab-runnerを作成します。
- プロキシのドメインを介してDocker仮想マシンのポート8080にリダイレクトしています。
すべてうまく機能し、ブラウザを使用してログインできます。https://gitlab.mydomain.de。
これで問題は、ランチャーへのすべてのリンクと複製されたリポジトリへのリンクがhttp://localhost
代わりに開始されることですhttps://gitlab.mydomain.de
。
docker-composeファイルのGITLAB_OMNIBUS_CONFIG->オプションにexternal_url
http://localhostが含まれているので、次のように変更しました。https://gitlab.mydomain.de、ドッカーコンテナを停止して再起動します。
docker-compose down; docker-compose up
ところで、今回は1つだけ得ました。502 ゲートウェイエラーエラーブラウザから。
これは私のプロキシ設定です。
server {
listen 10.77.77.254:443 ssl;
listen [2a01:4f8:241:1d02:0:77:77:254]:443 ssl;
server_name gitlab.mydomain.de;
include snippets.d/ssl_generic;
ssl_certificate /etc/letsencrypt/live/gitlab.mydomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gitlab.mydomain.de/privkey.pem;
include snippets.d/standard;
location / {
include snippets.d/proxy_generic;
proxy_pass http://10.77.77.107:8080;
}
}
これは私のものですdocker-compose.yml
:
version: '3.7'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'localhost'
container_name: gitlab-ce
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.mydomin.de'
ports:
- '8080:80'
- '8443:443'
volumes:
- '/var/docker/gitlab/config:/etc/gitlab'
- '/var/docker/gitlab/logs:/var/log/gitlab'
- '/var/docker/gitlab/data:/var/opt/gitlab'
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
container_name: gitlab-runner
restart: always
depends_on:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- '/var/docker/gitlab/gitlab-runner:/etc/gitlab-runner'
networks:
- gitlab
networks:
gitlab:
name: gitlab-network
私が変わったら
external_url 'https://gitlab.mydomain.de'
httpを返す
external_url 'http://gitlab.mydomain.de'
その後、設定は再び機能しました(ただし、Webインターフェイスには「http://」でのみ始まるエラーURLが表示されます)。
問題はhttps
external_urlにあるようです。
http://10.77.77.107:8433
Proxy_passをdocker-composeファイルからホストのSSLポートを提供する場所に変更した場合400 間違ったリクエスト 間違い:
400 Bad Request The plain HTTP request was sent to HTTPS port
修正する: ここ彼らは言った:
デフォルトでは、external_urlを指定すると、Omnibus GitLabはほとんどの環境で合理的であると見なされるいくつかのNGINXプロキシヘッダを設定します。
たとえば、Omnibus GitLabは次のように設定します。
"X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on"
external_urlにhttpsスキームを指定する場合。
ただし、GitLabがより複雑な設定(リバースプロキシの背後など)にある場合は、「必要な変更が拒否されました」または、「CSRFトークンの信頼性を確認できません。」エラーなどのエラーを防ぐために、プロキシヘッダを調整する必要があります。 422クラスが完了した場合は処理できません。
基本ヘッダーをオーバーライドしてみました。合成セクションのdocker-composeファイルにX-Forwarded-Proto:http:を追加しました。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.mydomain.de'
letsencrypt['enabled'] = false
nginx['listen_port'] = 80
nginx['proxy_set_headers'] = { "X-Forwarded-Proto" => "http", 'X-Forwarded-Ssl' => 'off' }
しかしそれも役に立ちません。
この問題をどのように解決できますか?
答え1
基本ヘッダーをオーバーライドする必要はありません。docker-compose.yml
GITLAB_OMNIBUS_CONFIGセクションのファイルに以下を追加しますnginx['listen_https'] = false
。
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.mydomain.de'
letsencrypt['enabled'] = false
nginx['listen_https'] = false
nginx['listen_port'] = 80
これにより、Docker内でSSLが無効になり、リバースプロキシがSSL操作を実行できるようになります。
バラよりhttps://docs.gitlab.com/omnibus/settings/nginx.html#external-proxy-and-load-balancer-ssl-termination