하나의 가상 머신에 gitlab을 설치하고 docker-compose를 사용하여 다른 가상 머신에 프록시와 함께 https를 추가합니다.

하나의 가상 머신에 gitlab을 설치하고 docker-compose를 사용하여 다른 가상 머신에 프록시와 함께 https를 추가합니다.

여러 개의 VM이 있는 서버가 있는데 그 중 하나는 올바른 도메인을 올바른 포트의 올바른 VM으로 연결하는 프록시입니다.

  1. 표준 docker-compose 파일을 사용하여 gitlab-ce 및 gitlab-runner를 생성합니다.
  2. 프록시의 도메인을 통해 Docker 가상 머신의 포트 8080으로 리디렉션 중입니다.

모두 잘 작동하며 브라우저를 사용하여 로그인할 수 있습니다https://gitlab.mydomain.de.

이제 문제는 실행기에 대한 모든 링크와 복제된 저장소에 대한 링크가 http://localhost대신 으로 시작된다는 것입니다 https://gitlab.mydomain.de.

docker-compose 파일의 GITLAB_OMNIBUS_CONFIG-> 옵션에 external_urlhttp://localhost가 포함되어 있으므로 다음으로 변경했습니다.https://gitlab.mydomain.de, 도커 컨테이너를 중지했다가 다시 시작하세요.

docker-compose down; docker-compose up

그런데 이번에는 하나만 얻었어요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'

그런 다음 설정이 다시 작동했습니다(그러나 이제 웹 인터페이스에서는 "http://"로만 시작하는 오류 URL이 표시됩니다).

문제는 httpsexternal_url에 있는 것 같습니다.

http://10.77.77.107:8433Proxy_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.ymlGITLAB_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

관련 정보