- GitLab Pages 데몬
- 사전 요구 사항
- 구성
- 고급 구성
- 환경 변수 사용하기
- 데몬의 상세 로깅 활성화하기
- 상관 ID 전파하기
- 저장 경로 변경하기
- 리버스 프록시 요청을 위한 리스너 구성하기
- 각 GitLab Pages 사이트의 전역 최대 크기 설정하기
- 각 GitLab Pages 사이트의 최대 크기 설정
- 프로젝트의 GitLab Pages 사이트 최대 크기 설정
- 프로젝트에 대한 GitLab Pages 맞춤 도메인의 최대 개수 설정
- 병렬 배포의 기본 만료 설정
- GitLab Pages 웹사이트당 최대 파일 수 설정
- 별도의 서버에서 GitLab Pages 실행
- 도메인 소스 구성
- 오브젝트 스토리지 설정
- 다중 노드 환경에서 페이지 네트워크 저장소 활성화
- ZIP 저장소
- 백업
- 보안
- 관련 주제
GitLab Pages 관리
GitLab Pages는 정적 사이트 호스팅을 허용합니다. 관리자가 설정해야 합니다. 별도의 사용자 문서가 제공됩니다.
GitLab Pages 데몬
GitLab Pages는 외부 IP 주소에서 수신을 할 수 있는 Go로 작성된 기본 HTTP 서버인 GitLab Pages daemon을 사용하며, 맞춤 도메인 및 맞춤 인증서 지원을 제공합니다. 서버 이름 표시(SNI)를 통해 동적 인증서를 지원하며, 기본적으로 HTTP2를 사용하여 페이지를 노출합니다. 작동 방식을 완전히 이해하려면 README를 읽는 것이 좋습니다.
맞춤 도메인 (다만 와일드카드 도메인은 제외) 의 경우, Pages 데몬은
포트 80
및/또는 443
에서 수신해야 합니다. 이러한 이유로 구성을 설정하는 방법에 대해 약간의 유연성이 있습니다:
- GitLab과 같은 서버에서 Pages 데몬을 실행하고, 보조 IP에서 수신합니다.
- 별도의 서버에서 Pages 데몬을 실행합니다. 이 경우, Pages 데몬이 설치된 서버에 페이지 경로도 존재해야 하므로, 네트워크를 통해 공유해야 합니다.
- GitLab과 같은 서버에서 Pages 데몬을 실행하고, 같은 IP에서 수신하되 다른 포트에서 실행합니다. 이 경우, 로드 밸런서로 트래픽을 프록시해야 합니다. 이 경로를 선택하면 HTTPS에 대해 TCP 로드 밸런싱을 사용해야 합니다. TLS 종료(HTTPS 로드 밸런싱)를 사용하는 경우, 사용자 제공 인증서로 페이지를 제공할 수 없습니다. HTTP의 경우 HTTP 또는 TCP 로드 밸런싱을 사용하는 것이 괜찮습니다.
이 문서에서는 첫 번째 옵션을 가정하고 진행합니다. 맞춤 도메인을 지원하지 않는 경우, 보조 IP는 필요하지 않습니다.
사전 요구 사항
Pages 구성을 진행하기 전에 다음을 수행해야 합니다:
-
GitLab 인스턴스 도메인의 하위 도메인이 아닌 Pages 도메인이 있어야 합니다.
GitLab 도메인 Pages 도메인 작동 여부 example.com
example.io
예 example.com
pages.example.com
아니요 gitlab.example.com
pages.example.com
예 - 와일드카드 DNS 레코드를 구성하십시오.
- 선택 사항. Pages를 HTTPS를 통해 제공하기로 결정한 경우 해당 도메인에 대한 와일드카드 인증서가 있어야 합니다.
- 선택 사항이지만 권장 사항. 인스턴스 러너를 활성화하여 사용자가 자신의 러너를 가져오지 않도록 합니다.
- 맞춤 도메인의 경우, 보조 IP가 있어야 합니다.
Public Suffix List에 도메인 추가하기
Public Suffix List는 브라우저가
서브 도메인을 처리하는 방법을 결정하는 데 사용됩니다. GitLab 인스턴스가
일반 사용자가 GitLab Pages 사이트를 생성할 수 있도록 허용하면, 해당 사용자가
페이지 도메인(example.io
)에 서브 도메인을 생성할 수 있도록 허용합니다.
도메인을 Public Suffix List에 추가하면 브라우저가
슈퍼쿠키를 수용하는 것을 방지합니다.
이 지침에 따라 GitLab Pages 서브 도메인을 제출하세요.
예를 들어, 도메인이 example.io
인 경우, example.io
가 Public Suffix List에 추가되도록 요청해야 합니다.
GitLab.com은 2016년에
gitlab.io
를 추가했습니다.
DNS 구성
GitLab Pages는 자체 가상 호스트에서 실행될 것으로 예상됩니다. DNS 서버/제공자에서
와일드카드 DNS A
레코드를 추가하여
GitLab이 실행되는 호스트를 가리키게 하세요. 예를 들어, 항목은 다음과 같이 보입니다:
*.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 없이 URL 경로의 네임스페이스 지원
URL 경로의 네임스페이스에 대한 요구 사항을 제거하기 위해 와일드카드 DNS에 대한 지원이 필요하면:
-
다음 기능의 GitLab Pages 플래그를 활성화하려면
/etc/gitlab/gitlab.rb
에gitlab_pages["namespace_in_path"] = true
를 추가하세요. -
DNS 제공자에서
example.io
에 대한 항목을 추가하세요.
example.io
를 도메인 이름으로 바꾸고,192.0.0.0
을 IP 주소의 IPv4 버전으로 바꿉니다. 항목은 다음과 같이 보입니다:example.io 1800 IN A 192.0.0.0
-
선택 사항. GitLab 인스턴스에 IPv6 주소가 있는 경우, 해당 주소에 대한 항목을 추가하세요.
example.io
를 도메인 이름으로 바꾸고,2001:db8::1
을 IP 주소의 IPv6 버전으로 바꿉니다. 항목은 다음과 같이 보입니다:example.io 1800 IN AAAA 2001:db8::1
이 예는 다음을 포함합니다:
-
example.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를 4 가지 방법으로 설정할 수 있습니다.
다음 예제는 가장 쉬운 설정에서 가장 고급 설정까지 나열되어 있습니다. 절대적인 최소 요구 사항은 모든 구성에서 필요하므로 와일드카드 DNS를 설정하는 것입니다.
와일드카드 도메인
필수 조건:
URL 스키마: http://<namespace>.example.io/<project_slug>
다음은 Pages를 사용할 수 있는 최소 설정입니다. 이것은 아래에 설명된 모든 다른 설정의 기반입니다. NGINX는 모든 요청을 데몬으로 프록시합니다. 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 재구성을 진행합니다.
이 구성에 대한 비디오 튜토리얼을 시청하세요.
와일드카드 DNS가 없는 Pages 도메인
이 구성은 GitLab Pages의 최소 설정입니다. 이것은 모든 다른 구성의 기반입니다. 이 구성에서 NGINX는 모든 요청을 데몬으로 프록시합니다. GitLab Pages 데몬은 외부 세계에서 수신 대기하지 않기 때문입니다.
필수 조건:
- DNS 설정을 와일드카드 없이 구성했습니다.
-
/etc/gitlab/gitlab.rb
에서 GitLab Pages의 외부 URL을 설정하고 기능을 활성화합니다:# 여기의 external_url은 참고용입니다. external_url "http://example.com" pages_external_url 'http://example.io' # 이 플래그를 설정하여 이 기능을 활성화합니다. gitlab_pages["namespace_in_path"] = true
-
GitLab 재구성을 진행합니다.
결과 URL 스키마는 http://example.io/<namespace>/<project_slug>
입니다.
경고: GitLab Pages는 한 번에 하나의 URL 스키마만 지원합니다: 와일드카드 DNS가 있는 경우 또는 없는 경우.
namespace_in_path
를 활성화하면 기존 GitLab Pages 웹사이트는
와일드카드 DNS가 없는 도메인에서만 접근할 수 있습니다.
TLS 지원을 포함한 와일드카드 도메인
필수 조건:
- 와일드카드 DNS 설정
- TLS 인증서. 와일드카드 또는 요구 사항을 충족하는 다른 유형이 될 수 있습니다.
URL 스킴: https://<namespace>.example.io/<project_slug>
NGINX는 모든 요청을 데몬으로 프록시합니다. Pages 데몬은 외부에서 청취하지 않습니다.
-
*.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 재구성을 수행합니다.
-
Pages 액세스 제어를 사용하는 경우, GitLab Pages의 리디렉션 URI를 시스템 OAuth 애플리케이션에서 HTTPS 프로토콜을 사용하도록 업데이트합니다.
경고: 하나의 인스턴스에 대해 여러 개의 와일드카드는 지원되지 않습니다. 인스턴스당 하나의 와일드카드만 할당할 수 있습니다.
경고: GitLab Pages는 리디렉션 URI를 변경하더라도 OAuth 애플리케이션을 업데이트하지 않습니다.
재구성하기 전에 /etc/gitlab/gitlab-secrets.json
에서 gitlab_pages
섹션을 제거한 다음
gitlab-ctl reconfigure
를 실행하세요. 자세한 내용은
GitLab Pages는 OAuth를 재생성하지 않습니다를 참조하세요.
와일드카드 DNS 없이 TLS 지원을 포함한 Pages 도메인
- GitLab 16.7에서 실험으로 도입되었습니다.
- GitLab 16.11에서 베타로 이동했습니다.
- GitLab 17.2에서 구현이 NGINX에서 GitLab Pages 코드베이스로 변경되었습니다.
- GitLab 17.4에서 일반적으로 사용 가능해졌습니다.
필수 조건:
- 와일드카드가 없는 DNS 설정을 구성해야 합니다. URL 경로의 네임스페이스가 없는 경우.
- 도메인을 포함하는 TLS 인증서가 필요합니다 (예:
example.io
).
이 구성에서 NGINX는 모든 요청을 데몬으로 프록시합니다. GitLab Pages 데몬은 외부에서 청취하지 않습니다.
-
필수 조건에서 언급한 TLS 인증서와 키를
/etc/gitlab/ssl
에 추가합니다. -
/etc/gitlab/gitlab.rb
에서 GitLab Pages의 외부 URL을 설정하고 기능을 활성화합니다:# external_url 필드는 참조용입니다. external_url "https://example.com" pages_external_url 'https://example.io' pages_nginx['redirect_http_to_https'] = true # 이 플래그를 설정하여 이 기능을 활성화합니다. gitlab_pages["namespace_in_path"] = true
-
TLS 인증서와 키가 도메인 이름과 일치하지 않는 경우,
example.io.crt
및example.io.key
와 같은 파일 이름을 사용하는 경우, 인증서와 키 파일의 전체 경로를/etc/gitlab/gitlab.rb
에 추가합니다:pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/pages-nginx.crt" pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/pages-nginx.key"
-
Pages 액세스 제어를 사용하는 경우, GitLab Pages의 리디렉션 URI를 시스템 OAuth 애플리케이션에서 HTTPS 프로토콜을 사용하도록 업데이트합니다.
경고: 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 스킴만 지원합니다: 와일드카드 DNS 사용 시 또는 와일드카드 DNS 미사용 시.
namespace_in_path
를 활성화하면 기존 GitLab Pages 웹사이트는
와일드카드 DNS가 없는 도메인에서만 접근할 수 있습니다.
TLS 종료 로드 밸런서가 있는 와일드카드 도메인
사전 요구 사항:
URL 스킴: https://<namespace>.example.io/<project_slug>
이 설정은 주로 Amazon Web Services에 GitLab POC를 설치할 때 사용됩니다. 여기에는 HTTPS 연결을 수신하고, TLS 인증서를 관리하고, 인스턴스로 HTTP 트래픽을 전달하는 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
전역 설정
아래는 Linux 패키지 설치에서 Pages에 알려진 모든 구성 설정과 그 설명을 보여주는 표입니다. 이 옵션은 /etc/gitlab/gitlab.rb
에서 조정할 수 있으며, GitLab을 재구성한 후 적용됩니다.
대부분의 이러한 설정은 Pages 데몬이 귀하의 환경에서 어떻게 실행되고 콘텐츠를 제공할지를 보다 세밀하게 제어할 필요가 없는 한 수동으로 구성할 필요가 없습니다.
설정 | 설명 |
---|---|
pages_external_url |
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 |
아티팩트 요청을 프록시할 API URL. GitLab external URL + /api/v4 로 기본값이 설정되며, 예를 들어 https://gitlab.com/api/v4 입니다. 별도의 Pages 서버 실행 시, 이 URL은 주요 GitLab 서버의 API를 가리켜야 합니다. |
auth_redirect_uri |
GitLab과 인증하기 위한 콜백 URL. URL은 pages_external_url 의 하위 도메인이어야 하며 + /auth 가 포함되어야 합니다. 기본값은 pages_external_url 의 프로젝트 하위 도메인 + /auth , 예를 들어 https://projects.example.io/auth 입니다. namespace_in_path 가 활성화되면 기본값은 pages_external_url + /projects/auth 가 됩니다. 예를 들어 https://example.io/projects/auth . |
auth_secret |
인증 요청 서명을 위한 비밀 키. OAuth 등록 중 GitLab에서 자동으로 가져오려면 비워 두십시오. |
client_cert |
GitLab API와의 상호 TLS에 사용되는 클라이언트 인증서. GitLab API 호출 시 상호 TLS 지원에 대한 세부 정보를 참조하십시오. |
client_key |
GitLab API와의 상호 TLS에 사용되는 클라이언트 키. GitLab API 호출 시 상호 TLS 지원에 대한 세부 정보를 참조하십시오. |
client_ca_certs |
GitLab API와의 상호 TLS에 사용되는 클라이언트 인증서에 서명하는 데 사용되는 루트 CA 인증서. GitLab API 호출 시 상호 TLS 지원에 대한 세부 정보를 참조하십시오. |
dir |
구성 및 비밀 파일을 위한 작업 디렉토리. |
enable |
현재 시스템에서 GitLab Pages를 활성화 또는 비활성화합니다. |
external_http |
Pages가 하나 이상의 보조 IP 주소에 바인딩되어 HTTP 요청을 제공하도록 구성합니다. 여러 주소를 배열로 제공할 수 있으며, 정확한 포트가 포함될 수 있습니다. 예: ['1.2.3.4', '1.2.3.5:8063'] . listen_http 값이 설정됩니다. TLS 종료가 있는 리버스 프록시 뒤에서 GitLab Pages를 실행하는 경우 external_http 대신 listen_proxy 를 지정합니다. |
external_https |
Pages가 하나 이상의 보조 IP 주소에 바인딩되어 HTTPS 요청을 제공하도록 구성합니다. 여러 주소를 배열로 제공할 수 있으며, 정확한 포트가 포함될 수 있습니다. 예: ['1.2.3.4', '1.2.3.5:8063'] . listen_https 값이 설정됩니다. |
server_shutdown_timeout |
GitLab Pages 서버 종료 타임아웃(초 단위, 기본값: 30s ). |
gitlab_client_http_timeout |
GitLab API HTTP 클라이언트 연결 타임아웃(초 단위, 기본값: 10s ). |
gitlab_client_jwt_expiry |
JWT 토큰 만료 시간(초 단위, 기본값: 30s ). |
gitlab_cache_expiry |
도메인 구성 캐시에 저장되는 최대 시간(기본값: 600s ). |
gitlab_cache_refresh |
도메인 구성 갱신이 설정되는 간격(기본값: 60s ). |
gitlab_cache_cleanup |
만료된 항목이 캐시에서 제거되는 간격(기본값: 60s ). |
gitlab_retrieval_timeout |
요청당 GitLab API로부터 응답을 기다리는 최대 시간(기본값: 30s ). |
gitlab_retrieval_interval |
GitLab API를 통해 도메인 구성을 다시 해결하려고 할 때 기다리는 간격(기본값: 1s ). |
gitlab_retrieval_retries |
API를 통해 도메인 구성을 찾기 위해 재시도할 최대 횟수(기본값: 3). |
domain_config_source |
이 매개변수는 14.0에서 제거되었으며, 이전 버전에서는 API 도메인 구성 소스를 활성화하고 테스트하는 데 사용할 수 있습니다. |
gitlab_id |
OAuth 애플리케이션 공개 ID. Pages가 GitLab과 인증할 때 자동으로 채우려면 비워 두십시오. |
gitlab_secret |
OAuth 애플리케이션 비밀. Pages가 GitLab과 인증할 때 자동으로 채우려면 비워 두십시오. |
auth_scope |
인증에 사용할 OAuth 애플리케이션 범위. GitLab Pages OAuth 애플리케이션 설정과 일치해야 합니다. 기본적으로 api 범위를 사용하려면 비워 두십시오. |
auth_timeout |
인증을 위한 GitLab 애플리케이션 클라이언트 타임아웃(초 단위, 기본값: 5s ). 값이 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 |
API 요청에만 사용되는 내부 GitLab 서버 주소. 이 트래픽을 내부 로드 밸런서를 통해 보내고 싶을 때 유용합니다. 기본값은 GitLab external_url . |
listen_proxy |
리버스 프록시 요청을 수신할 주소입니다. Pages는 이러한 주소의 네트워크 소켓에 바인딩되고 이로부터 수신 요청을 받습니다. $nginx-dir/conf/gitlab-pages.conf 에서 proxy_pass 의 값을 설정합니다. |
log_directory |
로그 디렉토리에 대한 절대 경로입니다. |
log_format |
로그 출력 형식: text 또는 json . |
log_verbose |
자세한 로깅, true/false. |
namespace_in_path |
(베타) 와일드카드 DNS 설정 없이 URL 경로에 네임스페이스를 활성화 또는 비활성화합니다. 기본값: false . |
propagate_correlation_id |
기존 상관 ID를 수신 요청 헤더 X-Request-ID 에서 재사용하도록 설정합니다(기본: false). 리버스 프록시가 이 헤더를 설정하면 값이 요청 체인에 전파됩니다. |
max_connections |
HTTP, HTTPS 또는 프록시 수신기에 대한 동시 연결 수의 제한. |
max_uri_length |
GitLab Pages에서 수용되는 URI의 최대 길이. 무제한 길이를 위해 0으로 설정합니다. |
metrics_address |
메트릭 요청을 수신할 주소입니다. |
redirect_http |
HTTP에서 HTTPS로 페이지를 리디렉션합니다, true/false. |
redirects_max_config_size |
_redirects 파일의 최대 크기(바이트 단위, 기본값: 65536). |
redirects_max_path_segments |
_redirects 규칙 URL에서 허용되는 최대 경로 세그먼트 수(기본값: 25). |
redirects_max_rule_count |
_redirects 에서 허용되는 규칙의 최대 수(기본값: 1000). |
sentry_dsn |
Sentry 크래시 보고서를 전송하는 주소입니다. |
sentry_enabled |
Sentry를 통한 보고 및 로깅을 활성화합니다, true/false. |
sentry_environment |
Sentry 크래시 보고서를 위한 환경입니다. |
status_uri |
상태 페이지의 URL 경로로 예: /@status . |
tls_max_version |
최대 TLS 버전을 지정합니다 (“tls1.2” 또는 “tls1.3”). |
tls_min_version |
최소 TLS 버전을 지정합니다 (“tls1.2” 또는 “tls1.3”). |
use_http2 |
HTTP2 지원을 활성화합니다. |
gitlab_pages['env'][] |
|
http_proxy |
GitLab Pages가 GitLab과의 트래픽을 중재하기 위해 HTTP 프록시를 사용하도록 구성합니다. Pages 데몬 시작 시 환경 변수 http_proxy 가 설정됩니다. |
gitlab_rails[] |
|
pages_domain_verification_cron_worker |
사용자 정의 GitLab Pages 도메인 검증을 위한 스케줄입니다. |
pages_domain_ssl_renewal_cron_worker |
GitLab Pages 도메인에 대한 SSL 인증서를 Let’s Encrypt를 통해 얻고 갱신하는 스케줄입니다. |
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 |
요청 헤더 및 본문을 읽는 최대 기간. 타임아웃이 없으려면 0 또는 음수 값으로 설정합니다. 기본값: 5s
|
server_read_header_timeout |
요청 헤더를 읽는 최대 기간. 타임아웃이 없으려면 0 또는 음수 값으로 설정합니다. 기본값: 1s
|
server_write_timeout |
응답에서 모든 파일을 작성하는 최대 기간. 더 큰 파일에는 더 많은 시간이 필요합니다. 타임아웃이 없으려면 0 또는 음수 값으로 설정합니다. 기본값: 0
|
server_keep_alive |
이 리스너에 의해 수락된 네트워크 연결에 대한 Keep-Alive 기간. 0 인 경우, 지원되는 경우 프로토콜과 운영 체제에 따라 Keep-Alive 가 활성화됩니다. 음수인 경우, Keep-Alive 가 비활성화됩니다. 기본값: 15s
|
고급 구성
와일드카드 도메인 외에, GitLab Pages를 사용자 정의 도메인과 함께 작동하도록 구성할 수 있는 옵션도 있습니다. 여기에는 TLS 인증서가 있는 사용자 정의 도메인과 TLS 인증서가 없는 사용자 정의 도메인의 두 가지 옵션이 있습니다. 가장 쉬운 설정은 TLS 인증서가 없는 것입니다. 두 경우 모두 보조 IP가 필요합니다. IPv4 주소와 함께 IPv6 주소가 있는 경우 두 가지 모두 사용할 수 있습니다.
사용자 정의 도메인
전제 조건:
- 와일드카드 DNS 설정
- 보조 IP
URL 스킴: http://<namespace>.example.io/<project_slug>
및 http://custom-domain.com
이 경우, Pages 데몬이 실행 중이며, NGINX는 여전히 요청을 데몬으로 프록시하지만, 데몬은 외부 세계로부터 요청을 받을 수도 있습니다. 사용자 정의 도메인이 지원되지만 TLS는 지원되지 않습니다.
-
/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
IPv6가 없으면 IPv6 주소를 생략할 수 있습니다.
TLS 지원이 있는 사용자 정의 도메인
전제 조건:
- 와일드카드 DNS 설정
- TLS 인증서. 와일드카드 또는 요구 사항을 충족하는 다른 종류일 수 있습니다.
- 보조 IP
URL 스킴: https://<namespace>.example.io/<project_slug>
및 https://custom-domain.com
이 경우, Pages 데몬이 실행 중이며, NGINX는 여전히 요청을 데몬으로 프록시하지만, 데몬은 외부 세계로부터 요청을 받을 수도 있습니다. 사용자 정의 도메인과 TLS가 지원됩니다.
-
*.example.io
에 대한 와일드카드 LTS 인증서와 키를/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 # HTTP에서 HTTPS로 페이지 리디렉션 gitlab_pages['redirect_http'] = true
IPv6가 없으면 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"
-
Pages 액세스 제어를 사용하고 있는 경우, GitLab Pages의 시스템 OAuth 애플리케이션에서 리디렉션 URI를 HTTPS 프로토콜을 사용하도록 업데이트하십시오.
사용자 지정 도메인 검증
악의적인 사용자가 자신에게 속하지 않는 도메인을 탈취하지 못하도록,
GitLab은 사용자 지정 도메인 검증을 지원합니다.
사용자 지정 도메인을 추가할 때, 사용자는 해당 도메인에 대한 DNS 레코드에
GitLab에서 제어하는 검증 코드를 추가하여 소유권을 증명해야 합니다.
경고:
도메인 검증을 비활성화하는 것은 안전하지 않으며 다양한 취약점으로 이어질 수 있습니다.
비활성화할 경우, Pages 루트 도메인 자체가 보조 IP를 가리키지 않도록 하거나
루트 도메인을 프로젝트의 사용자 지정 도메인으로 추가해야 합니다; 그렇지 않으면,
모든 사용자가 이 도메인을 자신의 프로젝트에 사용자 지정 도메인으로 추가할 수 있습니다.
사용자 기반이 개인적이거나 신뢰할 수 있는 경우,
검증 요구 사항을 비활성화할 수 있습니다:
- 왼쪽 사이드바에서 맨 아래 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
-
Require users to prove ownership of custom domains 체크박스를 지웁니다.
이 설정은 기본적으로 활성화되어 있습니다.
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가 해당 토큰으로 인증합니다.
페이지가 수신하는 각 요청에 대해 사용자가 해당 사이트를 읽을 수 있는 권한이 있는지 확인하기 위해
GitLab API에 요청을 합니다.
Pages 접근 제어는 기본적으로 비활성화되어 있습니다. 활성화하려면:
-
/etc/gitlab/gitlab.rb
에서 활성화합니다:gitlab_pages['access_control'] = true
- GitLab 재구성.
- 이제 사용자는 프로젝트 설정에서 이를 구성할 수 있습니다.
참고:
이 설정이 다중 노드 설정에서 효과를 발휘하려면
모든 앱 노드와 사이드키크 노드에 적용해야 합니다.
축소된 인증 범위로 Pages 사용하기
기본적으로, Pages 데몬은 인증을 위해 api
범위를 사용합니다. 이를 구성할 수 있습니다. 예를 들어,
/etc/gitlab/gitlab.rb
에서 범위를 read_api
로 줄입니다:
gitlab_pages['auth_scope'] = 'read_api'
인증에 사용할 범위는 GitLab Pages OAuth 애플리케이션 설정과 일치해야 합니다.
기존 애플리케이션의 사용자는 GitLab Pages OAuth 애플리케이션을 수정해야 합니다.
이를 수행하기 위한 단계는 다음과 같습니다:
- 접근 제어를 활성화합니다.
- 왼쪽 사이드바에서 맨 아래 Admin을 선택합니다.
- Applications를 선택합니다.
- GitLab Pages를 확장합니다.
-
api
범위의 체크박스를 지우고 원하는 범위의 체크박스를 선택합니다 (예:read_api
). - Save changes를 선택합니다.
모든 Pages 사이트에 대한 공개 액세스 비활성화
GitLab 인스턴스에서 호스팅되는 모든 GitLab Pages 웹사이트에 대해 액세스 제어를 적용할 수 있습니다.
이렇게 하면 인증된 사용자만이 해당 웹사이트에 접근할 수 있습니다.
이 설정은 개별 프로젝트에서 사용자가 설정한 액세스 제어를 무시합니다.
이것은 Pages 웹사이트에 게시된 정보를 인스턴스의 사용자에게만 제한하는 데 도움이 될 수 있습니다.
이를 위해 다음과 같이 진행하세요:
-
왼쪽 사이드바에서 맨 아래에 있는 Admin을 선택합니다.
-
Settings > Preferences를 선택합니다.
-
Pages를 확장합니다.
-
Disable public access to Pages sites 체크박스를 선택합니다.
-
Save changes를 선택합니다.
프록시 뒤에서 실행
GitLab의 나머지와 마찬가지로, Pages는 외부 인터넷 연결이 프록시로 제한된 환경에서도 사용할 수 있습니다.
GitLab Pages에 프록시를 사용하려면:
-
/etc/gitlab/gitlab.rb
에서 구성합니다:gitlab_pages['env']['http_proxy'] = 'http://example:8080'
-
변경 사항을 적용하려면 GitLab 재구성을 수행합니다.
사용자 지정 인증 기관(CA) 사용
사용자 지정 CA에서 발급한 인증서를 사용하는 경우, 액세스 제어 및 HTML 작업 아티팩트의 온라인 보기는 사용자 지정 CA가 인식되지 않으면 작동하지 않습니다.
보통 이로 인해 다음과 같은 오류가 발생합니다: Post /oauth/token: x509: certificate signed by unknown authority
.
Linux 패키지 설치의 경우, 사용자 지정 CA 설치를 통해 이 문제가 해결됩니다.
자체 컴파일된 설치의 경우, 시스템 인증서 저장소에 사용자 지정 인증 기관(CA)을 설치하여 이 문제를 해결할 수 있습니다.
GitLab API 호출 시 상호 TLS 지원
- GitLab 17.1에 도입됨.
전제 조건:
- 인스턴스는 Linux 패키지 설치 방법을 사용해야 합니다.
GitLab이 상호 TLS를 요구하도록 구성된 경우,
클라이언트 인증서를 GitLab Pages 구성에 추가해야 합니다.
인증서는 다음 요구 사항을 충족해야 합니다:
- 인증서에는 주체 대체 이름(Subject Alternative Name)으로 호스트 이름 또는 IP 주소가 지정되어야 합니다.
- 전체 인증서 체인이 필요하며, 끝 사용자 인증서, 중간 인증서 및 루트 인증서를 해당 순서로 포함해야 합니다.
인증서의 일반 이름(Common Name) 필드는 무시됩니다.
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']
여러 개의 사용자 지정 인증 기관(CA)에 대한 파일 경로는 쉼표로 구분합니다.
-
다중 노드 GitLab Pages 설치가 있는 경우, 모든 노드에서 이 단계를 반복합니다.
-
모든 GitLab 노드의
/etc/gitlab/trusted-certs
디렉토리에 전체 인증서 체인 파일의 복사본을 저장합니다.
ZIP 서비스 및 캐시 구성
경고:
이 지침은 GitLab 인스턴스의 고급 설정과 관련이 있습니다. 권장되는 기본 값은 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 과 함께 작동합니다. 중요한 세부정보는 아래 예제를 참조하세요. 기본값은 30s 입니다. |
zip_open_timeout |
ZIP 아카이브를 여는 데 허용되는 최대 시간입니다. 큰 아카이브나 느린 네트워크 연결의 경우 이 시간을 늘려야 합니다. 이렇게 하지 않으면 Pages 제공에 지연이 발생할 수 있습니다. 기본값은 30초입니다. |
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 강제 전송 보안 (HSTS) 지원
HTTP 강제 전송 보안 (HSTS)는 gitlab_pages['headers']
구성 옵션을 통해 활성화할 수 있습니다. HSTS는 브라우저에 방문하는 웹사이트가 항상 HTTPS를 통해 콘텐츠를 제공해야 함을 알립니다. 이로 인해 공격자가 후속 연결을 암호화되지 않은 상태로 강제하는 것을 방지할 수 있습니다. 또한 브라우저가 HTTPS로 리디렉션되기 전에 암호화되지 않은 HTTP 채널을 통해 연결을 시도하는 것을 방지하여 페이지 로딩 속도를 개선할 수 있습니다.
gitlab_pages['headers'] = ['Strict-Transport-Security: max-age=63072000']
Pages 프로젝트 리디렉션 제한
- 도입됨 GitLab 15.2에서.
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을 재구성합니다:
sudo gitlab-ctl reconfigure
데몬의 상세 로깅 활성화하기
GitLab Pages 데몬의 상세 로깅을 구성하려면 아래 단계를 따르세요.
-
기본적으로 데몬은
INFO
수준으로만 로깅합니다.DEBUG
수준의 이벤트를 로깅하려면/etc/gitlab/gitlab.rb
에서 이를 구성해야 합니다:gitlab_pages['log_verbose'] = true
상관 ID 전파하기
propagate_correlation_id
를 true로 설정하면 리버스 프록시 뒤에 설치된
시스템이 GitLab Pages에 전송된 요청에 대해 상관 ID를 생성하고 설정할 수 있습니다.
리버스 프록시가 헤더 값 X-Request-ID
를 설정하면 해당 값은 요청 체인에 전파됩니다.
사용자들은 로그에서 상관 ID를 찾을 수 있습니다.
상관 ID 전파를 활성화하려면:
-
/etc/gitlab/gitlab.rb
에서 매개변수를 true로 설정합니다:gitlab_pages['propagate_correlation_id'] = true
저장 경로 변경하기
GitLab Pages의 콘텐츠가 저장되는 기본 경로를 변경하려면 아래 단계를 따르세요.
-
기본적으로 Pages는
/var/opt/gitlab/gitlab-rails/shared/pages
에 저장됩니다. 다른 위치에 저장하려면/etc/gitlab/gitlab.rb
에서 설정해야 합니다:gitlab_rails['pages_path'] = "/mnt/storage/pages"
리버스 프록시 요청을 위한 리스너 구성하기
GitLab Pages의 프록시 리스너를 구성하려면 아래 단계를 따르세요.
-
기본적으로 리스너는
localhost:8090
에서 요청을 수신하도록 구성되어 있습니다.이를 비활성화하려면
/etc/gitlab/gitlab.rb
에서 구성해야 합니다:gitlab_pages['listen_proxy'] = nil
다른 포트에서 수신하도록 설정하려면
/etc/gitlab/gitlab.rb
에서 이 또한 구성해야 합니다:gitlab_pages['listen_proxy'] = "localhost:10080"
각 GitLab Pages 사이트의 전역 최대 크기 설정하기
전제 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
프로젝트의 전역 최대 페이지 크기를 설정하려면:
- 왼쪽 사이드바에서 하단의 Admin을 선택합니다.
- Settings > Preferences를 선택합니다.
- Pages를 확장합니다.
-
Maximum size of pages에 값을 입력합니다. 기본값은
100
입니다. - Save changes를 선택합니다.
각 GitLab Pages 사이트의 최대 크기 설정
Offering: Self-managed
선행 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
그룹 내 각 GitLab Pages 사이트의 최대 크기를 설정하려면, 상속된 설정을 무시하고:
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고 그룹을 찾습니다.
-
설정 > 일반을 선택합니다.
-
Pages를 확장합니다.
-
최대 크기 아래에 MB 단위로 값을 입력합니다.
-
변경 사항 저장을 선택합니다.
프로젝트의 GitLab Pages 사이트 최대 크기 설정
Offering: Self-managed
선행 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
프로젝트 내 GitLab Pages 사이트의 최대 크기를 설정하려면, 상속된 설정을 무시하고:
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
-
배포 > Pages를 선택합니다.
-
Pages의 최대 크기에서 MB 단위로 크기를 입력합니다.
-
변경 사항 저장을 선택합니다.
프로젝트에 대한 GitLab Pages 맞춤 도메인의 최대 개수 설정
선행 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
프로젝트에 대한 GitLab Pages 맞춤 도메인의 최대 개수를 설정하려면:
-
왼쪽 사이드바에서 맨 하단의 관리자를 선택합니다.
-
설정 > 기본 설정을 선택합니다.
-
Pages를 확장합니다.
-
프로젝트당 최대 맞춤 도메인 수에 대한 값을 입력합니다. 무제한 도메인의 경우
0
을 사용합니다. -
변경 사항 저장을 선택합니다.
병렬 배포의 기본 만료 설정
- GitLab 17.4에서 도입됨.
선행 조건:
- 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
인스턴스에서 병렬 배포가 삭제되기까지의 기본 기간을 설정하려면:
-
왼쪽 사이드바에서 맨 하단의 관리자를 선택합니다.
-
설정 > 기본 설정을 선택합니다.
-
Pages를 확장합니다.
-
초 단위로 병렬 배포의 기본 만료에 대한 값을 입력합니다.
기본적으로 병렬 배포가 만료되지 않도록 하려면
0
을 사용합니다. -
변경 사항 저장을 선택합니다.
GitLab Pages 웹사이트당 최대 파일 수 설정
총 파일 엔트리 수(디렉터리 및 심볼릭 링크 포함)는 GitLab Pages 웹사이트당 200,000
으로 제한됩니다.
자체 관리 인스턴스에서 GitLab Rails 콘솔을 사용하여 이 한계를 업데이트할 수 있습니다.
자세한 내용은 GitLab 애플리케이션 제한을 참조하세요.
별도의 서버에서 GitLab Pages 실행
주 애플리케이션 서버의 부하를 줄이기 위해 별도의 서버에서 GitLab Pages 데몬을 실행할 수 있습니다. 이 구성은 상호 TLS(mTLS)를 지원하지 않습니다. 자세한 내용은 해당 기능 제안을 참조하세요.
별도의 서버에서 GitLab Pages를 구성하려면:
경고:
다음 절차에는 gitlab-secrets.json
파일을 백업하고 편집하는 단계가 포함되어 있습니다. 이 파일에는 데이터베이스 암호화를 제어하는 비밀이 포함되어 있습니다. 주의해서 진행하세요.
-
선택적으로, 액세스 제어를 활성화하려면
/etc/gitlab/gitlab.rb
에 다음을 추가하고 GitLab 서버를 재구성합니다:gitlab_pages['access_control'] = true
경고:
액세스 제어와 함께 GitLab Pages를 사용하려면 먼저 첫 번째 GitLab 서버에서 이를 활성화해야 합니다.
gitlab-secrets.json
을 복사하기 전에 액세스 제어를 활성화해야 합니다. 액세스 제어를 활성화하면 새로운 OAuth 애플리케이션이 생성되며, 이에 대한 정보가gitlab-secrets.json
으로 전파됩니다. 올바른 순서로 진행하지 않으면 액세스 제어에 문제가 발생할 수 있습니다. -
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 서버에서 GitLab을 Linux 패키지를 사용하여 설치하고
/etc/gitlab/gitlab.rb
를 수정하여 다음을 포함합니다:roles ['pages_role'] pages_external_url "http://<pages_server_URL>" gitlab_pages['gitlab_server'] = 'http://<gitlab_server_IP_or_URL>' ## 3단계에서 액세스 제어가 활성화된 경우 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 서버에서
/etc/gitlab/gitlab-secrets.json
파일을 Pages 서버로 복사합니다.# 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 서버를 재구성하여 변경 사항이 적용되도록 합니다.
부하 분산을 원하신다면 여러 서버에서 GitLab Pages를 실행할 수 있습니다. DNS 서버를 구성하여 Pages 서버에 대한 여러 IP를 반환하거나, IP 수준에서 작동하는 로드 밸런서를 구성하는 등의 표준 로드 밸런싱 방식을 통해 이를 수행할 수 있습니다. 여러 서버에서 GitLab Pages를 설정하려면, 각 Pages 서버에 대해 위 절차를 수행하십시오.
도메인 소스 구성
GitLab Pages 데몬이 페이지 요청을 서비스할 때, 우선 어떤 프로젝트를 사용하여 요청된 URL을 제공할 것인지와 그 콘텐츠가 어떻게 저장되는지를 식별해야 합니다.
기본적으로, GitLab Pages는 새 도메인이 요청될 때마다 내부 GitLab API를 사용합니다.
API에 연결할 수 없는 경우 Pages는 시작되지 않습니다.
도메인 정보는 Pages 데몬에 의해 캐시되어, 후속 요청의 속도를 높입니다.
일반적인 문제에 대해서는 문제 해결을 참조하세요.
자세한 내용은 이 블로그 게시물을 참조하세요.
GitLab API 캐시 구성
API 기반 구성은 Pages 제공의 성능과 신뢰성을 개선하기 위해 캐싱 메커니즘을 사용합니다.
캐시 동작은 캐시 설정을 변경하여 수정할 수 있지만, 권장되는 값이 설정되어 있으므로 필요한 경우에만 수정해야 합니다.
이 값들을 잘못 구성하면 간헐적이거나 지속적인 오류가 발생하거나, Pages Daemon이 오래된 콘텐츠를 제공할 수 있습니다.
지속 시간 문자열은 선택적으로 서명된 소수 숫자의 시퀀스이며,
각 숫자는 선택적 분수와 단위 접미사를 가질 수 있습니다. 예를 들어
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에 대한 요청이
더 자주 발생하며, 예를 들어 연결 타임아웃과 같은 오류 응답이 있을 때만 요청이 발생합니다. -
gitlab_retrieval_retries
를 감소시키면 도메인의
구성을 자동으로 해결하는 시도가 오류를 보고하기 전에 줄어듭니다.
오브젝트 스토리지 설정
다음 오브젝트 스토리지 설정은 다음과 같습니다:
-
자가 컴파일된 설치에서는
pages:
아래와object_store:
아래에 중첩됩니다. -
리눅스 패키지 설치에서는
pages_object_store_
로 접두어가 붙습니다.
설정 | 설명 | 기본값 |
---|---|---|
enabled |
오브젝트 스토리지가 활성화되었는지 여부. | false |
remote_directory |
Pages 사이트 콘텐츠가 저장되는 버킷의 이름. | |
connection |
아래에 설명된 다양한 연결 옵션. |
로컬 스토리지 비활성화를 명시적으로 해야 합니다.
S3 호환 연결 설정
통합된 오브젝트 스토리지 설정을 사용해야 합니다.
다양한 공급자를 위한 사용 가능한 연결 설정을 참조하세요.
페이지 배포를 개체 저장소로 마이그레이션하기
기존 페이지 배포 객체(압축 파일)는 다음의 두 곳에 저장될 수 있습니다:
- 로컬 저장소
- 개체 저장소
기존 페이지 배포를 로컬 저장소에서 개체 저장소로 마이그레이션하세요:
sudo gitlab-rake gitlab:pages:deployments:migrate_to_object_storage
진행 상황을 추적하고 모든 페이지 배포가 성공적으로 마이그레이션 되었는지 확인하려면 PostgreSQL 콘솔을 사용하세요:
- Linux 패키지 설치의 경우
sudo gitlab-rails dbconsole --database main
. - 자체 컴파일 설치의 경우
sudo -u git -H psql -d gitlabhq_production
.
아래의 objectstg
(여기서 store=2
)에 모든 페이지 배포 수를 확인하세요:
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
모든 것이 올바르게 작동하는지 확인한 후, 페이지 로컬 저장소 비활성화하세요.
페이지 배포를 로컬 저장소로 롤백하기
개체 저장소로의 마이그레이션이 완료된 후, 페이지 배포를 로컬 저장소로 다시 이동할 수 있습니다:
sudo gitlab-rake gitlab:pages:deployments:migrate_to_local
페이지 로컬 저장소 비활성화
개체 저장소를 사용하는 경우, 불필요한 디스크 사용/작성을 피하기 위해 로컬 저장소를 비활성화할 수 있습니다:
-
/etc/gitlab/gitlab.rb
파일을 편집하세요:gitlab_rails['pages_local_store_enabled'] = false
-
변경 사항을 적용하기 위해 GitLab 재구성하세요.
다중 노드 환경에서 페이지 네트워크 저장소 활성화
개체 저장소는 대부분의 환경에서 선호되는 구성입니다. 그러나 네트워크 저장소가 필요하고 페이지를 별도의 서버에서 실행하도록 구성하려면 다음을 수행해야 합니다:
- 사용하려는 공유 저장소 볼륨이 이미 마운트되고 기본 서버와 페이지 서버 모두에서 사용 가능한지 확인하세요.
-
각 노드의
/etc/gitlab/gitlab.rb
를 업데이트하여 다음을 포함하세요:gitlab_pages['enable_disk'] = true gitlab_rails['pages_path'] = "/var/opt/gitlab/gitlab-rails/shared/pages" # 네트워크 저장소의 경로
- 페이지를 별도의 서버로 전환하세요.
별도의 서버에서 페이지가 성공적으로 구성되면, 해당 서버만 공유 저장소 볼륨에 접근할 수 있습니다. 다시 단일 노드 환경으로 마이그레이션해야 할 경우를 대비하여 기본 서버에 공유 저장소 볼륨을 마운트 상태로 유지하는 것이 좋습니다.
ZIP 저장소
GitLab 페이지의 기본 저장 형식은 프로젝트당 단일 ZIP 아카이브입니다.
이 ZIP 아카이브는 디스크 저장소에 로컬로 저장되거나 개체 저장소에 저장될 수 있습니다.
ZIP 아카이브는 페이지 사이트가 업데이트될 때마다 저장됩니다.
백업
GitLab 페이지는 정기 백업의 일부이므로 별도의 백업을 구성할 필요가 없습니다.
보안
XSS 공격을 방지하기 위해 GitLab과 다른 호스트 이름에서 GitLab Pages를 실행하는 것을 강력히 고려해야 합니다.
요청 제한
- 변경됨 GitLab 17.3에서: 페이지 요청 제한에서 서브넷을 제외할 수 있습니다.
서비스 거부(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
: 호스팅된 페이지 도메인당 초당 요청의 최대 임계값을 설정합니다. 이 기능을 비활성화하려면 0으로 설정합니다. -
rate_limit_domain_burst
: 호스팅된 페이지 도메인당 최초 일시적으로 허용되는 요청 수의 최대 임계값을 설정합니다.
TLS 연결 기반 요청 제한은 다음을 사용하여 적용됩니다:
-
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 연결 수의 최대 임계값을 설정합니다.
특정 IP 범위(서브넷)가 모든 요청 제한을 우회하도록 허용하려면:
-
rate_limit_subnets_allow_list
: 모든 요청 제한을 우회해야 하는 IP 범위(서브넷)를 포함하는 허용 목록을 설정합니다. 예:['1.2.3.4/24', '2001:db8::1/32']
.
차트 예제를 사용할 수 있습니다.
IPv6 주소는 128비트 주소 공간에서 큰 접두사를 수신합니다. 접두사는 일반적으로 /64 크기 이상입니다. 가능한 주소의 수가 많기 때문에 클라이언트의 IP 주소가 IPv6인 경우, 전체 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
도메인별 HTTP 요청 속도 제한 활성화
-
/etc/gitlab/gitlab.rb
에서 속도 제한 설정:gitlab_pages['rate_limit_domain'] = 1000 gitlab_pages['rate_limit_domain_burst'] = 5000
소스 IP별 TLS 연결 속도 제한 활성화
-
/etc/gitlab/gitlab.rb
에서 속도 제한 설정:gitlab_pages['rate_limit_tls_source_ip'] = 20.0 gitlab_pages['rate_limit_tls_source_ip_burst'] = 600
도메인별 TLS 연결 속도 제한 활성화
-
/etc/gitlab/gitlab.rb
에서 속도 제한 설정:gitlab_pages['rate_limit_tls_domain'] = 1000 gitlab_pages['rate_limit_tls_domain_burst'] = 5000