GitLab Pages 관리
Offering: GitLab Self-Managed
GitLab Pages는 GitLab 프로젝트와 그룹을 위한 정적 사이트 호스팅을 제공합니다. GitLab Pages 데몬은 별도의 프로세스로 실행되며 GitLab과 동일한 서버 또는 전용 인프라에서 구성할 수 있습니다.
GitLab Pages는 GitLab 프로젝트와 그룹을 위한 정적 사이트 호스팅을 제공합니다. 서버 관리자는 사용자가 이 기능에 액세스하기 전에 Pages를 구성해야 합니다. GitLab Pages를 통해 관리자는 다음을 수행할 수 있습니다:
- 사용자 지정 도메인과 SSL/TLS 인증서로 정적 웹사이트를 안전하게 호스팅합니다.
- 인증을 활성화하여 GitLab 권한을 통해 Pages 사이트에 대한 액세스를 제어합니다.
- 다중 노드 환경에서 오브젝트 스토리지 또는 네트워크 스토리지를 사용하여 배포를 확장합니다.
- 속도 제한 및 사용자 지정 헤더로 트래픽을 모니터링하고 관리합니다.
- 모든 Pages 사이트에 대해 IPv4 및 IPv6 주소를 지원합니다.
GitLab Pages 데몬은 별도의 프로세스로 실행되며 GitLab과 동일한 서버 또는 전용 인프라에서 구성할 수 있습니다. 사용자 문서는 GitLab Pages를 참조하세요.
이 가이드는 Linux 패키지 설치를 위한 것입니다. 소스 컴파일 설치의 경우 소스 컴파일 설치를 위한 GitLab Pages 관리를 참조하세요.
GitLab Pages 데몬#
GitLab Pages는 외부 IP 주소에서 수신 대기하고 사용자 지정 도메인 및 사용자 지정 인증서를 지원할 수 있는 Go로 작성된 기본 HTTP 서버인 GitLab Pages 데몬을 사용합니다. SNI(Server Name Indication)를 통해 동적 인증서를 지원하며 기본적으로 HTTP2를 사용하여 페이지를 노출합니다.
자세한 내용은 README를 참조하세요.
사용자 지정 도메인과 함께 사용할 경우 Pages 데몬은 포트 80 또는 443에서 수신 대기해야 합니다. 이는 와일드카드 도메인에는 필요하지 않습니다.
Pages 데몬을 실행할 수 있는 방법:
- 보조 IP에서 수신 대기하는 GitLab과 동일한 서버.
- 별도의 서버. Pages 데몬이 설치된 서버에 Pages 경로도 있어야 하므로 네트워크를 통해 공유해야 합니다.
- 동일한 IP이지만 다른 포트에서 수신 대기하는 GitLab과 동일한 서버. 이 경우 로드 밸런서로 트래픽을 프록시해야 합니다. HTTPS의 경우 TCP 로드 밸런싱을 사용합니다. TLS 종료(HTTPS 로드 밸런싱)를 사용하는 경우 사용자 제공 인증서로 페이지를 제공할 수 없습니다. HTTP의 경우 HTTP 또는 TCP 로드 밸런싱이 모두 허용됩니다.
다음 섹션에서는 첫 번째 옵션을 가정합니다. 사용자 지정 도메인을 지원하지 않는 경우 보조 IP가 필요하지 않습니다.
전제 조건#
이 섹션은 GitLab Pages 구성을 위한 전제 조건을 설명합니다.
GitLab 인스턴스와 Pages 데몬이 사설 네트워크 또는 방화벽 뒤에 배포된 경우, GitLab Pages 웹사이트는 사설 네트워크에 액세스할 수 있는 장치 및 사용자만 액세스할 수 있습니다.
와일드카드 도메인#
각 사이트는 고유한 하위 도메인을 가집니다(예: <namespace>.example.io/<project_slug>).
이 하위 도메인은 와일드카드 DNS 레코드(*.example.io)를 필요로 하며 대부분의 인스턴스에 권장되는 설정입니다.
와일드카드 도메인용 Pages를 구성하기 전에 다음을 수행해야 합니다:
-
GitLab 인스턴스 도메인의 하위 도메인이 아닌 Pages용 도메인을 보유합니다.
GitLab 도메인 Pages 도메인 작동 여부 example.comexample.io[check-circle] 예 example.compages.example.com[dotted-circle] 아니오 1 gitlab.example.compages.example.com[check-circle] 예 각주:
- Pages 도메인이 GitLab 인스턴스 도메인의 하위 도메인인 경우, 배포된 모든 Pages 사이트가 GitLab 세션 쿠키에 액세스할 수 있습니다.
-
와일드카드 DNS 레코드를 구성합니다.
-
선택 사항. HTTPS에서 Pages를 제공하기로 결정한 경우 해당 도메인에 대한 와일드카드 인증서를 보유합니다.
-
선택 사항이지만 권장됩니다. 인스턴스 러너를 활성화하여 사용자가 직접 러너를 제공할 필요가 없도록 합니다.
-
사용자 지정 도메인의 경우 보조 IP를 보유합니다.
단일 도메인 사이트#
모든 사이트가 하나의 도메인을 공유하며 네임스페이스와 프로젝트 슬러그가 경로 세그먼트로 사용됩니다
(예: example.io/<namespace>/<project_slug>).
이 도메인은 단일 DNS A 레코드만 필요합니다.
단일 도메인 사이트용 Pages를 구성하기 전에 다음을 수행해야 합니다:
-
GitLab 인스턴스 도메인의 하위 도메인이 아닌 Pages용 도메인을 보유합니다.
GitLab 도메인 Pages 도메인 지원 여부 example.comexample.io[check-circle] 예 example.compages.example.com[dotted-circle] 아니오 1 gitlab.example.compages.example.com[check-circle] 예 각주:
- Pages 도메인이 GitLab 인스턴스 도메인의 하위 도메인인 경우, 배포된 모든 Pages 사이트가 GitLab 세션 쿠키에 액세스할 수 있습니다.
-
DNS 레코드를 구성합니다.
-
선택 사항. HTTPS에서 Pages를 제공하기로 결정한 경우 해당 도메인에 대한 TLS 인증서를 보유합니다.
-
선택 사항이지만 권장됩니다. 인스턴스 러너를 활성화하여 사용자가 직접 러너를 제공할 필요가 없도록 합니다.
-
사용자 지정 도메인의 경우 보조 IP를 보유합니다.
공개 접미사 목록에 도메인 추가#
공개 접미사 목록은 브라우저가 하위 도메인을 처리하는 방법을 결정하는 데 사용됩니다. GitLab 인스턴스가 공개 구성원이 GitLab Pages 사이트를 만들 수 있도록 허용하는 경우, 해당 사용자가 Pages 도메인(example.io)에 하위 도메인을 만들 수 있도록 허용하기도 합니다. 도메인을 공개 접미사 목록에 추가하면 다른 것들 중에서 슈퍼쿠키를 수락하는 브라우저를 방지합니다.
GitLab Pages 하위 도메인을 제출하려면 공개 접미사 목록에 수정 사항 제출을 참조하세요.
예를 들어, 도메인이 example.io인 경우 example.io를 공개 접미사 목록에 추가하도록 요청해야 합니다. GitLab.com은 2016년에 gitlab.io를 추가했습니다.
DNS 구성#
GitLab Pages는 자체 가상 호스트에서 실행됩니다. DNS 서버 또는 공급자에서 GitLab이 실행되는 호스트를 가리키는 와일드카드 DNS A 레코드를 추가합니다. 예를 들면:
*.example.io. 1800 IN A 192.0.2.1
*.example.io. 1800 IN AAAA 2001:db8::1
여기서 example.io는 GitLab Pages가 제공되는 도메인이고,
192.0.2.1은 GitLab 인스턴스의 IPv4 주소이며, 2001:db8::1은
IPv6 주소입니다. IPv6이 없는 경우 AAAA 레코드를 생략할 수 있습니다.
단일 도메인 사이트의 DNS 구성#
히스토리
와일드카드 DNS 없이 단일 도메인 사이트에 대한 GitLab Pages DNS를 구성하려면:
-
/etc/gitlab/gitlab.rb에gitlab_pages['namespace_in_path'] = true를 추가하여 이 기능에 대한 GitLab Pages 플래그를 활성화합니다. -
DNS 공급자에서
example.io에 대한 항목을 추가합니다.example.io를 도메인 이름으로,192.0.0.0을 인스턴스의 IPv4 주소로 교체합니다:example.io 1800 IN A 192.0.0.0 -
선택 사항. GitLab 인스턴스에 IPv6 주소가 있는 경우 항목을 추가합니다.
example.io를 도메인 이름으로,2001:db8::1을 인스턴스의 IPv6 주소로 교체합니다:example.io 1800 IN AAAA 2001:db8::1example.io는 GitLab Pages가 제공되는 도메인입니다.
사용자 지정 도메인의 DNS 구성#
사용자 지정 도메인 지원이 필요한 경우 Pages 루트 도메인의 모든 하위 도메인이 Pages 데몬에 전용된 보조 IP를 가리켜야 합니다. 이 구성 없이는 사용자가 CNAME 레코드를 사용하여 사용자 지정 도메인을 GitLab Pages로 연결할 수 없습니다.
예를 들면:
example.com 1800 IN A 192.0.2.1
*.example.io. 1800 IN A 192.0.2.2
이 예제에는 다음이 포함됩니다:
example.com: GitLab 도메인.example.io: GitLab Pages가 제공되는 도메인.192.0.2.1: GitLab 인스턴스의 기본 IP.192.0.2.2: GitLab Pages에 전용된 보조 IP. 기본 IP와 달라야 합니다.
사용자 페이지를 제공하는 데 GitLab 도메인을 사용하지 마세요. 자세한 내용은 보안 섹션을 참조하세요.
구성#
GitLab Pages를 여러 방법으로 설정할 수 있습니다. 다음 예제는 가장 단순한 설정부터 가장 고급 설정 순으로 나열되어 있습니다.
와일드카드 도메인#
이 구성은 GitLab Pages를 사용하기 위한 최소 설정이며 다른 모든 설정의 기반 역할을 합니다. 이 구성에서:
- NGINX는 모든 요청을 GitLab Pages 데몬에 프록시합니다.
- GitLab Pages 데몬은 공용 인터넷에서 직접 수신 대기하지 않습니다.
전제 조건:
- 와일드카드 DNS를 구성했습니다.
와일드카드 도메인을 사용하도록 GitLab Pages를 구성하려면:
-
/etc/gitlab/gitlab.rb에서 GitLab Pages의 외부 URL을 설정합니다:external_url "http://example.com" # external_url은 참조용으로만 사용됨 pages_external_url 'http://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 http://pages.example.com이 될 수 없음 -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
결과적인 URL 체계는 http://<namespace>.example.io/<project_slug>입니다.
개요는 GitLab CE 및 EE에서 GitLab Pages 활성화 동영상을 참조하세요.
단일 도메인 사이트#
히스토리
이 구성은 단일 도메인 사이트를 사용하기 위한 최소 설정이며 다른 모든 단일 도메인 설정의 기반 역할을 합니다. 이 구성에서:
- NGINX는 모든 요청을 GitLab Pages 데몬에 프록시합니다.
- GitLab Pages 데몬은 공용 인터넷에서 직접 수신 대기하지 않습니다.
전제 조건:
- 단일 도메인 사이트에 대한 DNS를 구성했습니다.
단일 도메인 사이트를 사용하도록 GitLab Pages를 구성하려면:
-
/etc/gitlab/gitlab.rb에서 GitLab Pages의 외부 URL을 설정하고 기능을 활성화합니다:external_url "http://example.com" # 이 URL을 자신의 URL로 교체하세요 pages_external_url 'http://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 http://pages.example.com이 될 수 없음 # 이 기능을 활성화하려면 이 플래그를 설정하세요 gitlab_pages['namespace_in_path'] = true -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
결과적인 URL 체계는 http://example.io/<namespace>/<project_slug>입니다.
GitLab Pages는 한 번에 하나의 URL 체계만 지원합니다: 와일드카드 도메인 또는 단일 도메인 사이트.
namespace_in_path를 활성화하면 기존 GitLab Pages 웹사이트는 단일 도메인 사이트로만 액세스할 수 있습니다.
TLS 지원이 있는 와일드카드 도메인#
NGINX는 모든 요청을 데몬에 프록시합니다. Pages 데몬은 공용 인터넷에서 수신 대기하지 않습니다.
인스턴스에는 하나의 와일드카드만 할당할 수 있습니다.
전제 조건:
TLS 지원이 있는 와일드카드 도메인을 구성하려면:
-
*.example.io에 대한 와일드카드 TLS 인증서와 키를/etc/gitlab/ssl안에 놓습니다. -
/etc/gitlab/gitlab.rb에서 다음 구성을 지정합니다:external_url "https://example.com" # external_url은 참조용으로만 사용됨 pages_external_url 'https://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 https://pages.example.com이 될 수 없음 pages_nginx['redirect_http_to_https'] = true -
인증서와 키가
example.io.crt및example.io.key로 명명되지 않은 경우 전체 경로를 추가합니다:pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/pages-nginx.crt" pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/pages-nginx.key" -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
-
액세스 제어를 사용하는 경우 GitLab Pages 시스템 OAuth 애플리케이션의 리디렉션 URI를 HTTPS 프로토콜을 사용하도록 업데이트합니다.
결과적인 URL 체계는 https://<namespace>.example.io/<project_slug>입니다.
GitLab Pages는 리디렉션 URI에 변경 사항이 있을 경우 OAuth 애플리케이션을 업데이트하지 않습니다.
재구성하기 전에 /etc/gitlab/gitlab-secrets.json에서 gitlab_pages 섹션을 제거한 다음
gitlab-ctl reconfigure를 실행합니다. 자세한 내용은
GitLab Pages가 OAuth를 재생성하지 않음을 참조하세요.
TLS 지원이 있는 단일 도메인 사이트#
히스토리
이 구성에서 NGINX는 모든 요청을 데몬에 프록시합니다. GitLab Pages 데몬은 공용 인터넷에서 수신 대기하지 않습니다.
전제 조건:
- 단일 도메인 사이트에 대한 DNS를 구성했습니다.
- 도메인(예:
example.io)을 포함하는 TLS 인증서가 있습니다.
TLS 지원이 있는 단일 도메인 사이트를 구성하려면:
-
TLS 인증서와 키를
/etc/gitlab/ssl에 추가합니다. -
/etc/gitlab/gitlab.rb에서 GitLab Pages의 외부 URL을 설정하고 기능을 활성화합니다:external_url "https://example.com" # 이 URL을 자신의 URL로 교체하세요 pages_external_url 'https://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 https://pages.example.com이 될 수 없음 pages_nginx['redirect_http_to_https'] = true # 이 기능을 활성화하려면 이 플래그를 설정하세요 gitlab_pages['namespace_in_path'] = true -
TLS 인증서 또는 키 파일의 이름이
example.io.crt및example.io.key와 다른 경우 전체 경로를 추가합니다:pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/pages-nginx.crt" pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/pages-nginx.key" -
액세스 제어를 사용하는 경우 GitLab Pages 시스템 OAuth 애플리케이션의 리디렉션 URI를 HTTPS 프로토콜을 사용하도록 업데이트합니다.
[!note] GitLab Pages는 OAuth 애플리케이션을 업데이트하지 않으며, 기본
auth_redirect_uri는https://example.io/projects/auth로 업데이트됩니다. 재구성하기 전에/etc/gitlab/gitlab-secrets.json에서gitlab_pages섹션을 제거한 다음gitlab-ctl reconfigure를 실행합니다. 자세한 내용은 GitLab Pages가 OAuth를 재생성하지 않음을 참조하세요. -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
결과적인 URL 체계는 https://example.io/<namespace>/<project_slug>입니다.
GitLab Pages는 한 번에 하나의 URL 체계만 지원합니다:
와일드카드 도메인 또는 단일 도메인 사이트.
namespace_in_path를 활성화하면 기존 GitLab Pages 웹사이트는 단일 도메인 사이트로만 액세스할 수 있습니다.
TLS 종료 로드 밸런서가 있는 와일드카드 도메인#
Amazon Web Services에서 GitLab POC를 설치할 때 이 설정을 사용합니다. 이 설정에는 HTTPS 연결을 수신 대기하고 TLS 인증서를 관리하며 HTTP 트래픽을 인스턴스에 전달하는 TLS 종료 클래식 로드 밸런서가 포함됩니다.
전제 조건:
- 와일드카드 DNS를 구성했습니다.
- TLS 종료 로드 밸런서.
TLS 종료 로드 밸런서를 사용하여 와일드카드 도메인을 구성하려면:
-
/etc/gitlab/gitlab.rb에서 다음 구성을 지정합니다:external_url "https://example.com" # external_url은 참조용으로만 사용됨 pages_external_url 'https://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 https://pages.example.com이 될 수 없음 pages_nginx['enable'] = true pages_nginx['listen_port'] = 80 pages_nginx['listen_https'] = false pages_nginx['redirect_http_to_https'] = true -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
결과적인 URL 체계는 https://<namespace>.example.io/<project_slug>입니다.
전역 설정#
다음 표는 Linux 패키지 설치에서 Pages에 알려진 모든 구성 설정을 설명합니다.
이러한 옵션은 /etc/gitlab/gitlab.rb에서 조정할 수 있으며,
GitLab을 재구성한 후 적용됩니다.
이러한 설정의 대부분은 환경에서 Pages 데몬이 실행되고 콘텐츠를 제공하는 방법에 대해 더 세분화된 제어가 필요한 경우가 아니면 수동으로 구성할 필요가 없습니다.
| 설정 | 기본값 | 설명 |
|---|---|---|
pages_external_url 1 |
해당 없음 | GitLab Pages에 액세스할 수 있는 URL(프로토콜 포함 HTTP/HTTPS). https://를 사용하는 경우 추가 구성이 필요합니다. 자세한 내용은 TLS 지원이 있는 와일드카드 도메인 및 TLS 지원이 있는 사용자 지정 도메인을 참조하세요. |
gitlab_pages[] |
해당 없음 | |
access_control |
해당 없음 | 액세스 제어를 활성화할지 여부. |
api_secret_key |
자동 생성됨 | GitLab API로 인증하는 데 사용되는 비밀 키가 있는 파일의 전체 경로. |
artifacts_server |
해당 없음 | GitLab Pages에서 잡 아티팩트 보기를 활성화합니다. |
artifacts_server_timeout |
해당 없음 | 아티팩트 서버에 대한 프록시 요청의 시간 초과(초). |
artifacts_server_url |
GitLab external URL + /api/v4 |
아티팩트 요청을 프록시할 API URL(예: https://gitlab.com/api/v4). 별도의 Pages 서버를 실행하는 경우 이 URL은 기본 GitLab 서버의 API를 가리켜야 합니다. |
auth_redirect_uri |
pages_external_url의 프로젝트 하위 도메인 + /auth |
GitLab으로 인증하기 위한 콜백 URL. URL은 pages_external_url의 하위 도메인 + /auth이어야 합니다(예: https://projects.example.io/auth). namespace_in_path가 활성화된 경우 기본값은 pages_external_url + /projects/auth(예: https://example.io/projects/auth)입니다. |
auth_secret |
GitLab에서 자동 가져옴 | 인증 요청 서명에 사용되는 비밀 키. OAuth 등록 중 GitLab에서 자동으로 가져오려면 비워 두십시오. |
client_cert |
해당 없음 | GitLab API와의 상호 TLS에 사용되는 클라이언트 인증서. |
client_key |
해당 없음 | GitLab API와의 상호 TLS에 사용되는 클라이언트 키. |
client_ca_certs |
해당 없음 | GitLab API와의 상호 TLS에 사용되는 클라이언트 인증서 서명에 사용된 루트 CA 인증서. |
dir |
해당 없음 | 구성 및 비밀 파일에 대한 작업 디렉터리. |
enable |
해당 없음 | 현재 시스템에서 GitLab Pages를 활성화 또는 비활성화합니다. |
external_http |
해당 없음 | HTTP 요청을 제공하는 하나 이상의 보조 IP 주소에 바인딩하도록 Pages를 구성합니다. 여러 주소를 배열로 정확한 포트와 함께 제공할 수 있습니다(예: ['1.2.3.4', '1.2.3.5:8063']). listen_http 값을 설정합니다. TLS 종료를 사용하여 역방향 프록시 뒤에서 GitLab Pages를 실행하는 경우 external_http 대신 listen_proxy를 지정하세요. |
external_https |
해당 없음 | HTTPS 요청을 제공하는 하나 이상의 보조 IP 주소에 바인딩하도록 Pages를 구성합니다. 여러 주소를 배열로 정확한 포트와 함께 제공할 수 있습니다(예: ['1.2.3.4', '1.2.3.5:8063']). listen_https 값을 설정합니다. |
custom_domain_mode |
해당 없음 | 사용자 지정 도메인을 활성화하도록 Pages를 구성합니다: http 또는 https. 별도의 Pages 서버를 실행하는 경우 GitLab 서버에도 이 설정을 구성합니다. GitLab 18.1에서 도입. |
server_shutdown_timeout |
30s |
GitLab Pages 서버 종료 시간 초과(초). |
gitlab_client_http_timeout |
60s |
GitLab API HTTP 클라이언트 연결 시간 초과(초). |
gitlab_client_jwt_expiry |
30s |
JWT 토큰 만료 시간(초). |
gitlab_cache_expiry |
600s |
도메인의 구성이 캐시에 저장되는 최대 시간. |
gitlab_cache_refresh |
60s |
도메인의 구성이 새로 고쳐질 예정인 간격. |
gitlab_cache_cleanup |
60s |
만료된 항목이 캐시에서 제거되는 간격. |
gitlab_retrieval_timeout |
30s |
요청당 GitLab API 응답을 기다리는 최대 시간. |
gitlab_retrieval_interval |
1s |
GitLab API를 사용하여 도메인 구성을 다시 해결하기 전에 기다리는 간격. |
gitlab_retrieval_retries |
3 |
GitLab API를 사용하여 도메인 구성을 해결하려는 최대 재시도 횟수. |
gitlab_id |
자동 채워짐 | OAuth 애플리케이션 공개 ID. Pages가 GitLab으로 인증할 때 자동으로 채워지도록 비워 두십시오. |
gitlab_secret |
자동 채워짐 | OAuth 애플리케이션 비밀. Pages가 GitLab으로 인증할 때 자동으로 채워지도록 비워 두십시오. |
auth_scope |
api |
인증에 사용할 OAuth 애플리케이션 범위. GitLab Pages OAuth 애플리케이션 설정과 일치해야 합니다. 기본적으로 api 범위를 사용하려면 비워 두십시오. |
auth_timeout |
5s |
인증을 위한 GitLab 애플리케이션 클라이언트 시간 초과(초). 0 값은 시간 초과 없음을 의미합니다. |
auth_cookie_session_timeout |
10m |
인증 쿠키 세션 시간 초과(초). 0 값은 브라우저 세션 종료 후 쿠키가 삭제됨을 의미합니다. |
gitlab_server |
GitLab external_url |
액세스 제어가 활성화된 경우 인증에 사용할 서버. |
headers |
해당 없음 | 각 응답과 함께 클라이언트에 전송해야 하는 추가 HTTP 헤더를 지정합니다. 여러 헤더를 배열로 헤더와 값을 하나의 문자열로 제공할 수 있습니다(예: ['my-header: myvalue', 'my-other-header: my-other-value']). |
enable_disk |
해당 없음 | GitLab Pages 데몬이 디스크에서 콘텐츠를 제공하도록 허용합니다. 공유 디스크 스토리지를 사용할 수 없는 경우 비활성화합니다. |
insecure_ciphers |
해당 없음 | 3DES 및 RC4와 같은 안전하지 않은 암호를 포함할 수 있는 기본 암호 모음 목록을 사용합니다. |
internal_gitlab_server |
GitLab external_url |
API 요청에만 독점적으로 사용되는 내부 GitLab 서버 주소. 내부 로드 밸런서를 통해 해당 트래픽을 보내려는 경우 사용합니다. |
listen_proxy |
해당 없음 | 역방향 프록시 요청을 수신할 주소. Pages는 이러한 주소의 네트워크 소켓에 바인딩하고 수신 요청을 수신합니다. $nginx-dir/conf/gitlab-pages.conf의 proxy_pass 값을 설정합니다. |
log_directory |
해당 없음 | 로그 디렉터리의 절대 경로. |
log_format |
해당 없음 | 로그 출력 형식: text 또는 json. |
log_verbose |
해당 없음 | 자세한 로깅, true/false. |
namespace_in_path |
false |
단일 도메인 사이트 DNS 설정을 지원하도록 URL 경로에서 네임스페이스를 활성화 또는 비활성화합니다. |
propagate_correlation_id |
false |
들어오는 요청 헤더 X-Request-ID에서 기존 상관 관계 ID를 다시 사용하려면 true로 설정합니다. 역방향 프록시가 이 헤더를 설정하는 경우 값은 요청 체인에서 전파됩니다. |
max_connections |
해당 없음 | HTTP, HTTPS 또는 프록시 리스너에 대한 동시 연결 수 제한. |
max_uri_length |
2048 |
GitLab Pages에서 허용되는 URI의 최대 길이. 무제한 길이를 위해 0으로 설정합니다. |
metrics_address |
해당 없음 | 메트릭 요청을 수신할 주소. |
redirect_http |
해당 없음 | HTTP에서 HTTPS로 페이지를 리디렉션합니다, true/false. |
redirects_max_config_size |
65536 |
_redirects 파일의 최대 크기(바이트). |
redirects_max_path_segments |
25 |
_redirects 규칙 URL에서 허용되는 최대 경로 세그먼트 수. |
redirects_max_rule_count |
1000 |
_redirects에서 허용되는 최대 규칙 수. |
sentry_dsn |
해당 없음 | Sentry 충돌 보고를 보내기 위한 주소. |
sentry_enabled |
해당 없음 | Sentry로 보고 및 로깅을 활성화합니다, true/false. |
sentry_environment |
해당 없음 | Sentry 충돌 보고를 위한 환경. |
status_uri |
해당 없음 | 상태 페이지의 URL 경로(예: /@status). GitLab Pages에서 상태 확인 엔드포인트를 활성화하도록 구성합니다. |
tls_max_version |
해당 없음 | 최대 TLS 버전을 지정합니다("tls1.2" 또는 "tls1.3"). |
tls_min_version |
해당 없음 | 최소 TLS 버전을 지정합니다("tls1.2" 또는 "tls1.3"). |
use_http2 |
해당 없음 | HTTP2 지원을 활성화합니다. |
gitlab_pages['env'][] |
해당 없음 | |
http_proxy |
해당 없음 | Pages와 GitLab 사이의 트래픽을 중재하기 위해 HTTP 프록시를 사용하도록 GitLab Pages를 구성합니다. Pages 데몬을 시작할 때 환경 변수 http_proxy를 설정합니다. |
gitlab_rails[] |
해당 없음 | |
pages_domain_verification_cron_worker |
해당 없음 | 사용자 지정 GitLab Pages 도메인 확인 예약. |
pages_domain_ssl_renewal_cron_worker |
해당 없음 | GitLab Pages 도메인에 대한 Let's Encrypt를 통한 SSL 인증서 취득 및 갱신 예약. |
pages_domain_removal_cron_worker |
해당 없음 | 확인되지 않은 사용자 지정 GitLab Pages 도메인 제거 예약. |
pages_path |
GITLAB-RAILS/shared/pages |
디스크에 페이지가 저장되는 디렉터리. |
pages_nginx[] |
해당 없음 | |
enable |
해당 없음 | NGINX 내부에 Pages에 대한 가상 호스트 server{} 블록을 포함합니다. NGINX가 트래픽을 Pages 데몬으로 다시 프록시하는 데 필요합니다. Pages 데몬이 모든 요청을 직접 수신해야 하는 경우(예: 사용자 지정 도메인 사용 시) false로 설정합니다. |
FF_CONFIGURABLE_ROOT_DIR |
해당 없음 | 기본 폴더를 사용자 지정하는 기능 플래그(기본적으로 활성화됨). |
FF_ENABLE_PLACEHOLDERS |
해당 없음 | 재작성을 위한 기능 플래그(기본적으로 활성화됨). 자세한 내용은 재작성을 참조하세요. |
rate_limit_source_ip |
해당 없음 | 소스 IP별 초당 요청 수의 속도 제한. 이 기능을 비활성화하려면 0으로 설정합니다. |
rate_limit_source_ip_burst |
해당 없음 | 소스 IP당 초당 허용되는 최대 버스트. |
rate_limit_domain |
해당 없음 | 도메인별 초당 요청 수의 속도 제한. 이 기능을 비활성화하려면 0으로 설정합니다. |
rate_limit_domain_burst |
해당 없음 | 도메인당 허용되는 최대 버스트. |
rate_limit_tls_source_ip |
해당 없음 | 소스 IP별 초당 TLS 연결 수의 속도 제한. 이 기능을 비활성화하려면 0으로 설정합니다. |
rate_limit_tls_source_ip_burst |
해당 없음 | 소스 IP당 허용되는 최대 TLS 연결 버스트. |
rate_limit_tls_domain |
해당 없음 | 도메인별 초당 TLS 연결 수의 속도 제한. 이 기능을 비활성화하려면 0으로 설정합니다. |
rate_limit_tls_domain_burst |
해당 없음 | 도메인당 허용되는 최대 TLS 연결 버스트. |
rate_limit_subnets_allow_list |
해당 없음 | 모든 속도 제한을 우회해야 하는 IP 범위(서브넷)가 포함된 허용 목록. 예: ['1.2.3.4/24', '2001:db8::1/32']. GitLab 17.3에서 도입. |
server_read_timeout |
5s |
요청 헤더와 본문을 읽는 최대 기간. 시간 초과 없이는 0 또는 음수 값으로 설정합니다. |
server_read_header_timeout |
1s |
요청 헤더를 읽는 최대 기간. 시간 초과 없이는 0 또는 음수 값으로 설정합니다. |
server_write_timeout |
0 |
응답의 모든 파일을 쓰는 최대 기간. 큰 파일은 더 많은 시간이 필요합니다. 시간 초과 없이는 0 또는 음수 값으로 설정합니다. |
server_keep_alive |
15s |
이 리스너에서 허용된 네트워크 연결의 Keep-Alive 기간. 0이면 프로토콜 및 운영 체제에서 지원하는 경우 Keep-Alive가 활성화됩니다. 음수이면 Keep-Alive가 비활성화됩니다. |
각주:
- 외부 Sidekiq 노드를 사용하는 경우 구성에
pages_external_url을 추가해야 합니다. 이 설정 없이는 외부 Sidekiq 노드가 배포 잡을 처리할 수 없습니다.
고급 구성#
와일드카드 도메인 외에도 TLS 인증서가 있거나 없는 사용자 지정 도메인으로 작동하도록 GitLab Pages를 구성할 수 있습니다. 어느 경우에나 보조 IP가 필요합니다. IPv6 및 IPv4 주소가 모두 있는 경우 둘 다 사용할 수 있습니다.
사용자 지정 도메인#
이 구성에서 Pages 데몬이 실행 중이고 NGINX가 요청을 프록시하지만, 데몬은 공용 인터넷에서 요청을 받을 수도 있습니다. 사용자 지정 도메인은 TLS 없이 지원됩니다.
전제 조건:
- 와일드카드 DNS를 구성했습니다.
- 보조 IP.
사용자 지정 도메인을 구성하려면:
-
/etc/gitlab/gitlab.rb에서 다음 구성을 지정합니다:external_url "http://example.com" # external_url은 참조용으로만 사용됨 pages_external_url 'http://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 http://pages.example.com이 될 수 없음 nginx['listen_addresses'] = ['192.0.2.1'] # GitLab 인스턴스의 기본 IP pages_nginx['enable'] = false gitlab_pages['external_http'] = ['192.0.2.2:80', '[2001:db8::2]:80'] # GitLab Pages 데몬의 보조 IP gitlab_pages['custom_domain_mode'] = 'http' # 사용자 지정 도메인 활성화IPv6이 없는 경우 IPv6 주소를 생략합니다.
-
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
결과적인 URL 체계는 http://<namespace>.example.io/<project_slug> 및 http://custom-domain.com입니다.
TLS 지원이 있는 사용자 지정 도메인#
이 구성에서 Pages 데몬이 실행 중이고 NGINX가 요청을 프록시하지만, 데몬은 공용 인터넷에서 요청을 받을 수도 있습니다. 사용자 지정 도메인 및 TLS가 지원됩니다.
전제 조건:
TLS 지원이 있는 사용자 지정 도메인을 구성하려면:
-
*.example.io에 대한 와일드카드 TLS 인증서와 키를/etc/gitlab/ssl안에 놓습니다. -
/etc/gitlab/gitlab.rb에서 다음 구성을 지정합니다:external_url "https://example.com" # external_url은 참조용으로만 사용됨 pages_external_url 'https://example.io' # 중요: external_url의 하위 도메인이 아니어야 합니다. 따라서 https://pages.example.com이 될 수 없음 nginx['listen_addresses'] = ['192.0.2.1'] # GitLab 인스턴스의 기본 IP pages_nginx['enable'] = false gitlab_pages['external_http'] = ['192.0.2.2:80', '[2001:db8::2]:80'] # GitLab Pages 데몬의 보조 IP gitlab_pages['external_https'] = ['192.0.2.2:443', '[2001:db8::2]:443'] # GitLab Pages 데몬의 보조 IP gitlab_pages['custom_domain_mode'] = 'https' # 사용자 지정 도메인 활성화 # HTTP에서 HTTPS로 페이지 리디렉션 gitlab_pages['redirect_http'] = trueIPv6이 없는 경우 IPv6 주소를 생략합니다.
-
인증서와 키가
example.io.crt및example.io.key로 명명되지 않은 경우 전체 경로를 추가합니다:gitlab_pages['cert'] = "/etc/gitlab/ssl/example.io.crt" gitlab_pages['cert_key'] = "/etc/gitlab/ssl/example.io.key" -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
-
액세스 제어를 사용하는 경우 GitLab Pages 시스템 OAuth 애플리케이션의 리디렉션 URI를 HTTPS 프로토콜을 사용하도록 편집합니다.
사용자 지정 도메인 확인#
악의적인 사용자가 자신에게 속하지 않는 도메인을 하이재킹하지 못하도록 GitLab은 사용자 지정 도메인 확인을 지원합니다. 사용자 지정 도메인을 추가할 때 사용자는 GitLab 제어 확인 코드를 해당 도메인의 DNS 레코드에 추가하여 소유권을 증명해야 합니다.
도메인 확인을 비활성화하면 안전하지 않으며 다양한 취약점으로 이어질 수 있습니다. 비활성화하는 경우 Pages 루트 도메인 자체가 보조 IP를 가리키지 않도록 하거나 루트 도메인을 프로젝트의 사용자 지정 도메인으로 추가합니다. 그렇지 않으면 모든 사용자가 이 도메인을 자신의 프로젝트에 사용자 지정 도메인으로 추가할 수 있습니다.
사용자 기반이 비공개이거나 신뢰할 수 있는 경우 확인 요구 사항을 비활성화할 수 있습니다:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- 사용자가 사용자 지정 도메인의 소유권을 증명하도록 요구 확인란을 선택 취소합니다. 이 설정은 기본적으로 활성화됩니다.
Let's Encrypt 통합#
GitLab Pages의 Let's Encrypt 통합을 통해 사용자는 사용자 지정 도메인에서 제공되는 GitLab Pages 사이트에 대한 Let's Encrypt SSL 인증서를 추가할 수 있습니다.
활성화하려면:
- 만료 도메인에 대한 알림을 받을 이메일 주소를 선택합니다.
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- 알림을 받을 이메일 주소를 입력하고 Let's Encrypt 서비스 약관에 동의합니다.
- Save changes를 선택합니다.
액세스 제어#
GitLab Pages 액세스 제어는 프로젝트별로 구성할 수 있으며, 해당 프로젝트에 대한 사용자의 멤버십에 따라 Pages 사이트에 대한 액세스를 제어할 수 있습니다.
액세스 제어는 Pages 데몬을 GitLab과 함께 OAuth 애플리케이션으로 등록하여 작동합니다. 인증되지 않은 사용자가 비공개 Pages 사이트에 대한 액세스를 요청할 때마다 Pages 데몬은 사용자를 GitLab으로 리디렉션합니다. 인증에 성공하면 사용자는 쿠키에 유지되는 토큰과 함께 Pages로 다시 리디렉션됩니다. 쿠키는 비밀 키로 서명되어 변조를 감지할 수 있습니다.
비공개 사이트에서 리소스를 보기 위한 각 요청은 해당 토큰을 사용하여 Pages에서 인증됩니다. 수신된 각 요청에 대해 Pages는 GitLab API에 요청하여 사용자가 해당 사이트를 읽을 권한이 있는지 확인합니다.
Pages 액세스 제어는 기본적으로 비활성화되어 있습니다. 활성화하려면:
-
/etc/gitlab/gitlab.rb에서 다음을 추가합니다:gitlab_pages['access_control'] = true -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
-
이제 사용자가 프로젝트 설정에서 구성할 수 있습니다.
다중 노드 설정에서 이 설정이 적용되려면 모든 App 노드와 Sidekiq 노드에 적용합니다.
축소된 인증 범위로 Pages 사용#
Pages 데몬이 인증에 사용하는 범위를 구성할 수 있습니다. 기본적으로 api 범위를 사용합니다.
예를 들어, 이는 /etc/gitlab/gitlab.rb에서 범위를 read_api로 줄입니다:
gitlab_pages['auth_scope'] = 'read_api'
인증에 사용할 범위는 GitLab Pages OAuth 애플리케이션 설정과 일치해야 합니다. 기존 애플리케이션의 사용자는 GitLab Pages OAuth 애플리케이션을 수정해야 합니다.
전제 조건:
- 액세스 제어를 활성화했습니다.
Pages가 사용하는 범위를 변경하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Applications를 선택합니다.
- GitLab Pages를 확장합니다.
api범위의 확인란을 선택 취소하고 원하는 범위의 확인란을 선택합니다(예:read_api).- Save changes를 선택합니다.
모든 Pages 사이트에 대한 공개 액세스 비활성화#
GitLab 인스턴스에서 호스팅되는 모든 GitLab Pages 웹사이트에 대한 액세스 제어를 적용할 수 있습니다. 이 설정을 활성화하면 인증된 사용자만 Pages 웹사이트에 액세스할 수 있습니다. 모든 프로젝트는 Everyone 가시성 수준 옵션을 잃고 프로젝트 가시성 설정에 따라 프로젝트 멤버 또는 액세스 권한이 있는 모든 사람으로 제한됩니다.
이 설정을 사용하여 Pages로 게시된 정보를 인스턴스의 사용자만 사용할 수 있도록 제한합니다.
전제 조건:
- 인스턴스에 대한 관리자 액세스.
- 설정이 Admin 영역에 표시되도록 활성화된 액세스 제어.
모든 Pages 사이트에 대한 공개 액세스를 비활성화하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- Pages 사이트에 대한 공개 액세스 비활성화 확인란을 선택합니다.
- Save changes를 선택합니다.
기본적으로 고유 도메인 비활성화#
히스토리
- GitLab 18.3에서 도입.
기본적으로 새로 만든 모든 GitLab Pages 사이트는 고유 도메인 URL을 사용합니다
(예: my-project-1a2b3c.example.com). 이는 동일한 네임스페이스 아래 다른 사이트 간의 쿠키 공유를 방지합니다.
이 기본 동작을 비활성화하여 새 Pages 사이트가 경로 기반 URL을 사용하도록 할 수 있습니다
(예: my-namespace.example.com/my-project).
그러나 이 방식은 동일한 네임스페이스 아래 다른 사이트 간에 쿠키 공유 위험이 있습니다.
이 설정은 새 사이트에 대한 기본 동작만 제어합니다. 사용자는 여전히 개별 프로젝트에 대해 이 설정을 재정의할 수 있습니다.
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
기본적으로 고유 도메인을 비활성화하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- 기본적으로 고유 도메인 활성화 확인란을 선택 취소합니다.
- Save changes를 선택합니다.
이 설정은 새 Pages 사이트에만 영향을 미칩니다. 기존 사이트는 현재 고유 도메인 구성을 유지합니다.
프록시 뒤에서 실행#
프록시를 통해 외부 인터넷 연결이 제어되는 환경에서 GitLab Pages를 사용할 수 있습니다.
GitLab Pages에 프록시를 사용하려면:
-
/etc/gitlab/gitlab.rb에서 다음을 추가합니다:gitlab_pages['env']['http_proxy'] = 'http://example:8080' -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
사용자 지정 인증 기관(CA) 사용#
사용자 지정 CA에서 발급한 인증서를 사용하는 경우, 사용자 지정 CA가 인식되지 않으면 액세스 제어 및 HTML 잡 아티팩트의 온라인 보기가 작동하지 않습니다.
이 경우 일반적으로 다음과 같은 오류가 발생합니다:
Post /oauth/token: x509: certificate signed by unknown authority
이를 해결하려면:
- Linux 패키지 설치의 경우 사용자 지정 CA를 설치합니다.
- 소스 컴파일 설치의 경우 시스템 인증서 저장소에 사용자 지정 CA를 설치합니다.
GitLab API 호출 시 상호 TLS 지원#
히스토리
- GitLab 17.1에서 도입.
GitLab이 상호 TLS를 요구하도록 구성된 경우 GitLab Pages 구성에 클라이언트 인증서를 추가해야 합니다.
인증서에는 다음 요구 사항이 있습니다:
- 인증서는 호스트 이름 또는 IP 주소를 주체 대체 이름으로 지정해야 합니다.
- 최종 사용자 인증서, 중간 인증서, 루트 인증서 순서로 전체 인증서 체인이 필요합니다.
인증서의 공통 이름 필드는 무시됩니다.
전제 조건:
- 인스턴스가 Linux 패키지 설치 방법을 사용합니다.
GitLab Pages 서버에서 인증서를 구성하려면:
-
GitLab Pages 노드에서
/etc/gitlab/ssl디렉터리를 만들고 키와 전체 인증서 체인을 복사합니다:sudo mkdir -p /etc/gitlab/ssl sudo chmod 755 /etc/gitlab/ssl sudo cp key.pem cert.pem /etc/gitlab/ssl/ sudo chmod 644 key.pem cert.pem -
/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['client_cert'] = ['/etc/gitlab/ssl/cert.pem'] gitlab_pages['client_key'] = ['/etc/gitlab/ssl/key.pem'] -
사용자 지정 CA를 사용한 경우 루트 CA 인증서를
/etc/gitlab/ssl에 복사하고/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['client_ca_certs'] = ['/etc/gitlab/ssl/ca.pem']여러 사용자 지정 인증 기관에 대한 파일 경로는 쉼표로 구분됩니다.
-
다중 노드 GitLab Pages 설치가 있는 경우 모든 노드에서 이 단계를 반복합니다.
-
모든 GitLab 노드의
/etc/gitlab/trusted-certs디렉터리에 전체 인증서 체인 파일의 복사본을 저장합니다.
ZIP 제공 및 캐시 구성#
권장 기본값은 GitLab Pages 내부에서 설정됩니다. 절대적으로 필요한 경우에만 이 설정을 변경하세요.
GitLab Pages는 오브젝트 스토리지를 통해 ZIP 아카이브에서 콘텐츠를 제공할 수 있습니다. ZIP 아카이브에서 콘텐츠를 제공할 때 성능을 높이기 위해 인메모리 캐시를 사용합니다. 다음 구성 플래그를 변경하여 캐시 동작을 수정할 수 있습니다.
| 설정 | 설명 |
|---|---|
zip_cache_expiration |
ZIP 아카이브의 캐시 만료 간격. 오래된 콘텐츠 제공을 방지하려면 0보다 커야 합니다. 기본값은 60s. |
zip_cache_cleanup |
아카이브가 만료된 후 메모리에서 정리되는 간격. 기본값은 30s. |
zip_cache_refresh |
zip_cache_expiration 이전에 액세스된 경우 아카이브가 메모리에서 연장되는 시간 간격. zip_cache_expiration과 함께 아카이브를 메모리에서 연장할지 결정합니다. 자세한 내용은 ZIP 캐시 새로 고침 예제를 참조하세요. 기본값은 30s. |
zip_open_timeout |
ZIP 아카이브를 열기 위해 허용되는 최대 시간. 큰 아카이브나 느린 네트워크 연결의 경우 이 값을 늘립니다. 기본값은 30s. |
zip_http_client_timeout |
ZIP HTTP 클라이언트의 최대 시간. 기본값은 30m. |
ZIP 캐시 새로 고침 예제#
아카이브는 zip_cache_expiration 이전에 액세스되고 만료까지 남은 시간이 zip_cache_refresh 이하인 경우 캐시에서 새로 고쳐집니다(메모리에 유지되는 시간 연장). 예를 들어, archive.zip이 시간 0s에 액세스되면 60s(기본 zip_cache_expiration)에 만료됩니다. 아카이브가 15s 후에 다시 열리면 만료까지 남은 시간(45s)이 zip_cache_refresh(기본 30s)보다 크기 때문에 새로 고쳐지지 않습니다. 그러나 아카이브가 45s 후에(처음 열린 시간부터) 다시 액세스되면 새로 고쳐집니다. 이렇게 하면 아카이브가 메모리에 남아 있는 시간이 45s + zip_cache_expiration(60s)로 연장되어 총 105s가 됩니다.
아카이브가 zip_cache_expiration에 도달하면 만료로 표시되고 다음 zip_cache_cleanup 간격에 제거됩니다.

HTTP Strict Transport Security (HSTS) 지원#
HTTP Strict Transport Security(HSTS)는 gitlab_pages['headers'] 구성 옵션을 통해 활성화할 수 있습니다. HSTS는 브라우저에게 웹사이트가 항상 HTTPS를 통해 액세스되어야 함을 알려서 공격자가 암호화되지 않은 연결을 강요하지 못하게 합니다. 또한 브라우저가 HTTPS로 리디렉션되기 전에 암호화되지 않은 HTTP 연결을 시도하는 것을 방지하여 페이지 로딩 속도를 향상시킬 수 있습니다.
gitlab_pages['headers'] = ['Strict-Transport-Security: max-age=63072000']
Pages 프로젝트 리디렉션 제한#
GitLab Pages에는 성능 영향을 최소화하기 위해 _redirects 파일에 대한 기본 제한이 있습니다.
제한을 조정하려면:
gitlab_pages['redirects_max_config_size'] = 131072
gitlab_pages['redirects_max_path_segments'] = 50
gitlab_pages['redirects_max_rule_count'] = 2000
환경 변수 사용#
기능 플래그를 활성화하거나 비활성화하기 위해 Pages 데몬에 환경 변수를 전달할 수 있습니다.
구성 가능한 디렉터리 기능을 비활성화하려면:
-
/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['env'] = { 'FF_CONFIGURABLE_ROOT_DIR' => "false" } -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
데몬의 자세한 로깅 활성화#
GitLab Pages 데몬의 자세한 로깅을 구성하려면:
-
기본적으로 데몬은
INFO수준으로만 로깅합니다.DEBUG수준으로 이벤트를 로깅하려면/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['log_verbose'] = true -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
상관 관계 ID 전파#
propagate_correlation_id를 true로 설정하면 역방향 프록시 뒤의 설치가 GitLab Pages로 전송된 요청에서 상관 관계 ID를 생성하고 설정할 수 있습니다. 역방향 프록시가 헤더 값 X-Request-ID를 설정하면 값은 요청 체인에서 전파됩니다. 사용자는 로그에서 상관 관계 ID를 찾을 수 있습니다.
상관 관계 ID 전파를 활성화하려면:
-
/etc/gitlab/gitlab.rb에서 다음을 추가합니다:gitlab_pages['propagate_correlation_id'] = true -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
스토리지 경로 변경#
GitLab Pages 콘텐츠가 저장되는 기본 경로를 변경하려면:
-
Pages는 기본적으로
/var/opt/gitlab/gitlab-rails/shared/pages에 저장됩니다. 다른 위치를 사용하려면/etc/gitlab/gitlab.rb를 편집합니다:gitlab_rails['pages_path'] = "/mnt/storage/pages" -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
역방향 프록시 요청을 위한 리스너 구성#
GitLab Pages의 프록시 리스너를 구성하려면:
-
기본적으로 리스너는
localhost:8090에서 요청을 수신하도록 구성됩니다.비활성화하려면
/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['listen_proxy'] = nil포트를 변경하려면
/etc/gitlab/gitlab.rb를 편집합니다:gitlab_pages['listen_proxy'] = "localhost:10080" -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
각 GitLab Pages 사이트의 전역 최대 크기 설정#
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
프로젝트에 대한 전역 최대 Pages 크기를 설정하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- Pages의 최대 크기에서 값을 입력합니다. 기본값은
100입니다. - Save changes를 선택합니다.
그룹에서 각 GitLab Pages 사이트의 최대 크기 설정#
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
상속된 설정을 재정의하여 그룹의 각 GitLab Pages 사이트의 최대 크기를 설정하려면:
- 상단 표시줄에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
- Settings > General을 선택합니다.
- Pages를 확장합니다.
- 최대 크기 아래에 MB 단위로 값을 입력합니다.
- Save changes를 선택합니다.
프로젝트에서 GitLab Pages 사이트의 최대 크기 설정#
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
상속된 설정을 재정의하여 프로젝트의 GitLab Pages 사이트의 최대 크기를 설정하려면:
- 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- Deploy > Pages를 선택합니다.
- Pages의 최대 크기에 MB 단위로 크기를 입력합니다.
- Save changes를 선택합니다.
프로젝트당 GitLab Pages 사용자 지정 도메인의 최대 수 설정#
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
프로젝트에 대한 GitLab Pages 사용자 지정 도메인의 최대 수를 설정하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- 프로젝트당 최대 사용자 지정 도메인 수에 대한 값을 입력합니다. 무제한 도메인에는
0을 사용합니다. - Save changes를 선택합니다.
병렬 배포의 기본 만료 구성#
히스토리
- GitLab 17.4에서 도입.
전제 조건:
- 인스턴스에 대한 관리자 액세스.
병렬 배포가 삭제된 후 기본 기간을 구성하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
- **병렬 배포의 기본 만료 시간(초)**에 대한 값을 입력합니다.
병렬 배포가 기본적으로 만료되지 않아야 하는 경우
0을 사용합니다. - Save changes를 선택합니다.
GitLab Pages 웹사이트당 최대 파일 수 설정#
각 GitLab Pages 웹사이트에 대한 파일 항목(디렉터리와 심볼릭 링크 포함)의 총 수는 200,000으로 제한됩니다.
GitLab Rails 콘솔을 사용하여 GitLab Self-Managed 인스턴스에서 제한을 업데이트할 수 있습니다.
자세한 내용은 GitLab Pages 웹사이트당 파일 수에 대한 GitLab 애플리케이션 제한을 참조하세요.
별도의 서버에서 GitLab Pages 실행#
기본 애플리케이션 서버의 부하를 줄이기 위해 별도의 서버에서 GitLab Pages 데몬을 실행할 수 있습니다.
다음 절차에는 gitlab-secrets.json 파일을 백업하고 편집하는 단계가 포함됩니다. 이 파일에는 데이터베이스 암호화를 제어하는 비밀이 포함되어 있습니다. 주의하여 진행하세요.
별도의 서버에서 GitLab Pages를 구성하려면:
-
선택 사항. 액세스 제어를 활성화하려면
/etc/gitlab/gitlab.rb에 다음을 추가하고 GitLab 서버를 재구성합니다:[!warning] 액세스 제어와 함께 GitLab Pages를 사용하려는 경우
gitlab-secrets.json을 복사하기 전에 GitLab 서버에서 활성화합니다. 액세스 제어를 활성화하면 새 OAuth 애플리케이션이 생성되고 그에 대한 정보가gitlab-secrets.json에 전파됩니다. 올바른 순서로 수행되지 않으면 액세스 제어 관련 문제가 발생할 수 있습니다.gitlab_pages['access_control'] = true -
GitLab 서버에서 비밀 파일의 백업을 만듭니다:
cp /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.bak -
GitLab 서버에서 Pages를 활성화하려면
/etc/gitlab/gitlab.rb에 다음을 추가합니다:pages_external_url "http://<pages_server_URL>" -
다음 중 하나를 통해 오브젝트 스토리지를 설정합니다:
-
변경 사항을 적용하려면 GitLab 서버를 재구성합니다.
gitlab-secrets.json파일이 이제 새 구성으로 업데이트됩니다. -
새 서버를 설정합니다. 이것이 Pages 서버가 됩니다.
-
Pages 서버에서 Linux 패키지를 사용하여 GitLab을 설치하고
/etc/gitlab/gitlab.rb를 수정하여 포함합니다:roles ['pages_role'] pages_external_url "http://<pages_server_URL>" gitlab_pages['gitlab_server'] = 'http://<gitlab_server_IP_or_URL>' ## 액세스 제어가 활성화된 경우 gitlab_pages['access_control'] = true -
GitLab 서버에 사용자 지정 UID/GID 설정이 있는 경우 Pages 서버
/etc/gitlab/gitlab.rb에도 추가합니다. 그렇지 않으면 GitLab 서버에서gitlab-ctl reconfigure를 실행하면 파일 소유권이 변경되어 Pages 요청이 실패할 수 있습니다. -
Pages 서버에서 비밀 파일의 백업을 만듭니다:
cp /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.bak -
개별 GitLab Pages 사이트에 대한 사용자 지정 도메인을 활성화하려면 다음 중 하나를 사용하여 Pages 서버를 설정합니다:
-
GitLab 서버에서 Pages 서버로
/etc/gitlab/gitlab-secrets.json파일을 복사합니다:# GitLab 서버에서 cp /etc/gitlab/gitlab-secrets.json /mnt/pages/gitlab-secrets.json # Pages 서버에서 mv /var/opt/gitlab/gitlab-rails/shared/pages/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json -
변경 사항을 적용하려면 Pages 서버를 재구성합니다.
-
GitLab 서버에서
/etc/gitlab/gitlab.rb에 다음과 같이 변경합니다:pages_external_url "http://<pages_server_URL>" gitlab_pages['enable'] = false pages_nginx['enable'] = false -
개별 GitLab Pages 사이트에 대한 사용자 지정 도메인을 활성화하려면 GitLab 서버에서
/etc/gitlab/gitlab.rb에 다음과 같이 변경합니다:-
사용자 지정 도메인:
gitlab_pages['custom_domain_mode'] = 'http' -
TLS 지원이 있는 사용자 지정 도메인:
gitlab_pages['custom_domain_mode'] = 'https'
-
-
변경 사항을 적용하려면 GitLab 서버를 재구성합니다.
부하를 분산하기 위해 DNS 서버를 여러 IP를 반환하도록 구성하거나 IP 레벨 로드 밸런서를 사용하는 등의 표준 로드 밸런싱 방법을 사용하여 여러 서버에서 GitLab Pages를 실행할 수 있습니다. 여러 서버에서 GitLab Pages를 설정하려면 각 Pages 서버에 대해 이전 절차를 반복합니다.
도메인 소스 구성#
GitLab Pages 데몬이 요청을 처리할 때 먼저 어떤 프로젝트가 요청된 URL을 처리해야 하는지와 콘텐츠가 어떻게 저장되는지를 식별합니다.
기본적으로 GitLab Pages는 새 도메인이 요청될 때마다 내부 GitLab API를 사용합니다. API에 연결할 수 없으면 Pages가 시작되지 않습니다. 도메인 정보는 후속 요청 속도를 높이기 위해 Pages 데몬에 의해 캐시됩니다.
일반적인 문제는 문제 해결 섹션을 참조하세요.
GitLab API 캐시 구성#
API 기반 구성은 성능과 안정성을 향상시키기 위한 캐싱 메커니즘을 사용합니다. 다음 설정을 변경하여 캐시 동작을 수정할 수 있지만, 권장 기본값은 필요한 경우에만 변경해야 합니다. 잘못된 구성은 간헐적이거나 지속적인 오류를 초래하거나 Pages 데몬이 오래된 콘텐츠를 제공할 수 있습니다.
만료, 간격 및 시간 초과 플래그는
Go 기간 형식을 사용합니다. 기간 문자열은 선택적 분수와 단위 접미사가 있는 십진수의 가능한 부호가 있는 시퀀스입니다. 예: 300ms, 1.5h, 2h45m. 유효한 시간 단위는 ns, us (또는 µs), ms, s, m, h입니다.
예제:
gitlab_cache_expiry를 늘리면 항목이 캐시에 더 오래 존재할 수 있습니다. GitLab Pages와 GitLab Rails 사이의 통신이 안정적이지 않은 경우 이 설정을 사용합니다.gitlab_cache_refresh를 늘리면 GitLab Pages가 GitLab Rails에서 도메인 구성을 요청하는 빈도가 줄어듭니다. GitLab Pages가 GitLab API에 너무 많은 요청을 생성하고 콘텐츠가 자주 변경되지 않는 경우 이 설정을 사용합니다.gitlab_cache_cleanup을 줄이면 캐시에서 만료된 항목을 더 자주 제거하여 Pages 노드의 메모리 사용량을 줄입니다.gitlab_retrieval_timeout을 줄이면 GitLab Rails에 대한 요청이 더 빨리 중지됩니다. 늘리면 API에서 응답을 받는 데 더 많은 시간이 허용됩니다. 느린 네트워크 환경에서 이 설정을 사용합니다.gitlab_retrieval_interval을 줄이면 연결 시간 초과와 같이 API에서 오류 응답이 있을 때만 API에 더 자주 요청합니다.gitlab_retrieval_retries를 줄이면 오류를 보고하기 전에 도메인 구성을 재시도하는 횟수가 줄어듭니다.
오브젝트 스토리지 설정#
다음 오브젝트 스토리지 설정은:
- 소스 컴파일 설치에서
pages:아래에object_store:로 중첩됩니다. - Linux 패키지 설치에서
pages_object_store_가 접두사로 붙습니다.
| 설정 | 설명 | 기본값 |
|---|---|---|
enabled |
오브젝트 스토리지가 활성화되어 있는지 여부. | false |
remote_directory |
Pages 사이트 콘텐츠가 저장되는 버킷 이름. | |
connection |
아래에 설명된 다양한 연결 옵션. |
NFS 서버 사용을 중지하고 연결을 끊으려면 로컬 스토리지를 명시적으로 비활성화해야 합니다.
S3 호환 연결 설정#
통합된 오브젝트 스토리지 설정을 사용해야 합니다.
다양한 공급자의 사용 가능한 연결 설정을 참조하세요.
Pages 배포를 오브젝트 스토리지로 마이그레이션#
기존 Pages 배포 개체(ZIP 아카이브)는 로컬 스토리지 또는 오브젝트 스토리지에 저장할 수 있습니다.
기존 Pages 배포를 로컬 스토리지에서 오브젝트 스토리지로 마이그레이션하려면:
sudo gitlab-rake gitlab:pages:deployments:migrate_to_object_storage
PostgreSQL 콘솔을 사용하여 진행 상황을 추적하고 모든 Pages 배포가 성공적으로 마이그레이션되었는지 확인할 수 있습니다:
- Linux 패키지 설치의 경우
sudo gitlab-rails dbconsole --database main. - 소스 컴파일 설치의 경우
sudo -u git -H psql -d gitlabhq_production.
objectstg(store=2)에 모든 Pages 배포 수가 있는지 확인합니다:
gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM pages_deployments;
total | filesystem | objectstg
------+------------+-----------
10 | 0 | 10
모든 것이 올바르게 작동하는지 확인한 후 Pages 로컬 스토리지를 비활성화합니다.
Pages 배포를 로컬 스토리지로 롤백#
오브젝트 스토리지로 마이그레이션한 후 Pages 배포를 로컬 스토리지로 다시 이동할 수 있습니다:
sudo gitlab-rake gitlab:pages:deployments:migrate_to_local
Pages 로컬 스토리지 비활성화#
오브젝트 스토리지를 사용하는 경우 불필요한 디스크 사용 또는 쓰기를 방지하기 위해 로컬 스토리지를 비활성화할 수 있습니다:
-
/etc/gitlab/gitlab.rb를 편집합니다:gitlab_rails['pages_local_store_enabled'] = false -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
다중 노드 환경에서 Pages 네트워크 스토리지 활성화#
오브젝트 스토리지는 대부분의 환경에 선호되는 구성입니다. 그러나 요구 사항이 네트워크 스토리지를 필요로 하고 별도의 서버에서 실행되도록 Pages를 구성하려는 경우:
-
공유 스토리지 볼륨이 기본 서버와 의도한 Pages 서버 모두에 이미 마운트되어 사용 가능한지 확인합니다.
-
각 노드에서
/etc/gitlab/gitlab.rb를 업데이트하여 포함합니다:gitlab_pages['enable_disk'] = true gitlab_rails['pages_path'] = "/var/opt/gitlab/gitlab-rails/shared/pages" # 네트워크 스토리지 경로 -
별도의 서버로 Pages를 전환합니다.
별도의 서버에서 Pages를 성공적으로 구성한 후에는 해당 서버만 공유 스토리지 볼륨에 액세스해야 합니다. 단일 노드 환경으로 다시 마이그레이션해야 하는 경우에 대비하여 기본 서버에 공유 스토리지 볼륨을 마운트한 상태로 유지하는 것을 고려하세요.
ZIP 스토리지#
GitLab Pages의 기본 스토리지 형식은 프로젝트당 단일 ZIP 아카이브입니다. 이러한 아카이브는 로컬 또는 오브젝트 스토리지에 저장할 수 있습니다. Pages 사이트가 업데이트될 때마다 새 아카이브가 저장됩니다.
백업#
GitLab Pages는 정기 백업의 일부이므로 별도로 구성할 백업이 없습니다.
보안#
XSS 공격을 방지하기 위해 GitLab과 다른 호스트 이름으로 GitLab Pages를 실행하는 것을 강력히 고려해야 합니다.
속도 제한#
히스토리
- GitLab 17.3에서 변경: Pages 속도 제한에서 서브넷을 제외할 수 있습니다.
DoS(서비스 거부) 공격의 위험을 최소화하기 위해 속도 제한을 적용할 수 있습니다. GitLab Pages는 속도 제한을 적용하기 위해 토큰 버킷 알고리즘을 사용합니다. 기본적으로 지정된 제한을 초과하는 요청 또는 TLS 연결은 보고되고 거부됩니다.
GitLab Pages는 다음 유형의 속도 제한을 지원합니다:
- 각
source_ip에 대해: 단일 클라이언트 IP 주소의 요청 또는 TLS 연결을 제한합니다. - 각
domain에 대해: GitLab Pages에서 호스팅되는 도메인당 요청 또는 TLS 연결을 제한합니다.example.com과 같은 사용자 지정 도메인이나group.gitlab.io와 같은 그룹 도메인이 될 수 있습니다.
HTTP 요청 기반 속도 제한은 다음 설정을 사용하여 적용됩니다:
rate_limit_source_ip: 클라이언트 IP당 초당 최대 요청 수. 비활성화하려면0으로 설정합니다.rate_limit_source_ip_burst: 페이지가 여러 리소스를 동시에 로드할 때와 같이 클라이언트 IP당 초기 버스트에서 허용되는 최대 요청 수.rate_limit_domain: 호스팅된 Pages 도메인당 초당 최대 요청 수. 비활성화하려면0으로 설정합니다.rate_limit_domain_burst: 호스팅된 Pages 도메인당 초기 버스트에서 허용되는 최대 요청 수.
TLS 연결 기반 속도 제한은 다음 설정을 사용하여 적용됩니다:
rate_limit_tls_source_ip: 클라이언트 IP당 초당 최대 TLS 연결 수. 비활성화하려면0으로 설정합니다.rate_limit_tls_source_ip_burst: 클라이언트 IP당 초기 버스트에서 허용되는 최대 TLS 연결 수.rate_limit_tls_domain: 호스팅된 Pages 도메인당 초당 최대 TLS 연결 수. 비활성화하려면0으로 설정합니다.rate_limit_tls_domain_burst: 호스팅된 Pages 도메인당 초기 버스트에서 허용되는 최대 TLS 연결 수.
특정 IP 범위(서브넷)가 모든 속도 제한을 우회하도록 허용하려면 rate_limit_subnets_allow_list를 사용합니다.
예: ['1.2.3.4/24', '2001:db8::1/32']. GitLab Pages 차트 예제가 있습니다.
클라이언트의 IP 주소가 IPv6인 경우 전체 주소가 아닌 길이 64의 IPv6 접두사에 제한이 적용됩니다.
소스 IP별 HTTP 요청 속도 제한 활성화#
/etc/gitlab/gitlab.rb에서 속도 제한을 설정하려면:
-
다음을 추가합니다:
gitlab_pages['rate_limit_source_ip'] = 20.0 gitlab_pages['rate_limit_source_ip_burst'] = 600 -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
도메인별 HTTP 요청 속도 제한 활성화#
/etc/gitlab/gitlab.rb에서 속도 제한을 설정하려면:
-
다음을 추가합니다:
gitlab_pages['rate_limit_domain'] = 1000 gitlab_pages['rate_limit_domain_burst'] = 5000 -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
소스 IP별 TLS 연결 속도 제한 활성화#
/etc/gitlab/gitlab.rb에서 속도 제한을 설정하려면:
-
다음을 추가합니다:
gitlab_pages['rate_limit_tls_source_ip'] = 20.0 gitlab_pages['rate_limit_tls_source_ip_burst'] = 600 -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
도메인별 TLS 연결 속도 제한 활성화#
/etc/gitlab/gitlab.rb에서 속도 제한을 설정하려면:
-
다음을 추가합니다:
gitlab_pages['rate_limit_tls_domain'] = 1000 gitlab_pages['rate_limit_tls_domain_burst'] = 5000 -
파일을 저장하고 변경 사항을 적용하려면 GitLab을 재구성합니다.
