여러 개의 VM이 있는 서버가 있는데 그 중 하나는 올바른 도메인을 올바른 포트의 올바른 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
그런데 이번에는 하나만 얻었어요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이 표시됩니다).
문제는 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