사용자 및 IP 속도 제한

Tier: Free, Premium, Ultimate Offering: Self-Managed

속도 제한은 웹 응용 프로그램의 보안과 내구성을 향상시키는 데 사용되는 일반적인 기술입니다. 자세한 내용은 속도 제한을 참조하십시오.

다음 제한 사항은 기본적으로 비활성화됩니다:

note
기본적으로 모든 Git 동작은 먼저 비인증으로 시도됩니다. 이로 인해 HTTP Git 작업은 비인증 요청에 대한 속도 제한을 트리거할 수 있습니다.
note
API 요청의 속도 제한은 웹 트래픽으로 항상 계산되므로 프론트엔드에서 발생한 요청에 영향을 주지 않습니다.

비인증 API 요청 속도 제한 활성화

비인증 API 요청 속도 제한을 활성화하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 비인증 API 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. IP 당 단위 시간당 최대 비인증 API 요청 값을 업데이트하십시오. 기본값은 3600입니다.
    • 선택 사항. 초당 비인증 속도 제한 기간 값을 업데이트하십시오. 기본값은 3600입니다.

인증되지 않은 웹 요청 속도 제한 활성화

비인증 요청 속도 제한을 활성화하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 비인증된 웹 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. IP 당 단위 시간당 최대 비인증된 웹 요청 값을 업데이트하십시오. 기본값은 3600입니다.
    • 선택 사항. 초당 비인증 속도 제한 기간 값을 업데이트하십시오. 기본값은 3600입니다.

인증된 API 요청 속도 제한 활성화

인증된 API 요청 속도 제한을 활성화하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증된 API 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. 사용자 단위 시간당 최대 인증된 API 요청 값을 업데이트하십시오. 기본값은 7200입니다.
    • 선택 사항. 인증된 API 속도 제한 기간(초) 값을 업데이트하십시오. 기본값은 3600입니다.

인증된 웹 요청 속도 제한 활성화

인증된 요청 속도 제한을 활성화하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 인증된 웹 요청 속도 제한 활성화를 선택합니다.

    • 선택 사항. 사용자 단위 시간당 최대 인증된 웹 요청 값을 업데이트하십시오. 기본값은 7200입니다.
    • 선택 사항. 인증된 웹 속도 제한 기간(초) 값을 업데이트하십시오. 기본값은 3600입니다.

사용자 정의 속도 제한 응답 사용

속도 제한을 초과하는 요청은 429 응답 코드와 기본적으로 나중에 다시 시도하십시오라는 평문 본문이 반환됩니다.

사용자 정의 응답을 사용하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 클라이언트에 보낼 평문 응답 텍스트 상자에 평문 응답 메시지를 추가하십시오.

분당 project/:id/jobs의 최대 인증된 요청 수

타임아웃을 줄이기 위해 project/:id/jobs 엔드포인트의 기본 속도 제한은 인증된 사용자 당 1분당 600회의 호출로 설정됩니다.

최대 요청 수를 수정하려면:

  1. 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 네트워크를 선택합니다.
  3. 사용자 및 IP 속도 제한을 확장합니다.
  4. 분당 project/:id/jobs의 최대 인증된 요청 수 값을 업데이트하십시오.

응답 헤더

클라이언트가 관련 속도 제한을 초과하는 경우, 해당 요청은 차단됩니다. 서버는 요청자가 특정 시간이 지난 후 다시 시도할 수 있도록 속도 제한 정보로 응답할 수 있습니다. 이러한 정보는 응답 헤더에 첨부됩니다.

헤더 예시 설명
RateLimit-Limit 60 클라이언트 매 분마다의 요청 할당량. 관리 영역에서 설정한 속도 제한 기간이 1분이 아니면, 이 헤더의 값은 60분 주기에 거의 맞게 조정됩니다.
RateLimit-Name throttle_authenticated_web 요청을 차단하는 쓰로틀의 이름.
RateLimit-Observed 67 시간 창에 연결된 요청 수입니다.
RateLimit-Remaining 0 시간 창에서 남은 할당량. RateLimit-Limit - RateLimit-Observed의 결과입니다.
RateLimit-Reset 1609844400 요청 할당량이 재설정되는 Unix 시간 형식의 시간.
RateLimit-ResetTime Tue, 05 Jan 2021 11:00:00 GMT 요청 할당량이 재설정되는 RFC2616 형식의 날짜와 시간.
Retry-After 30 할당량이 재설정될 때까지의 남은 기간 초 단위로 표시됩니다. 이것은 표준 HTTP 헤더입니다.

속도 제한 우회를 위한 HTTP 헤더 사용

조직의 요구에 따라 속도 제한을 활성화하되 일부 요청을 속도 제한자를 우회하게 하려면 다음을 수행할 수 있습니다.

로드 밸런서나 GitLab 앞에 있는 역방향 프록시에서 속도 제한자를 우회해야 하는 요청에 대해 사용자 정의 헤더를 지정합니다. 예를 들어:

  1. 우회 헤더의 이름을 선택합니다. 예: Gitlab-Bypass-Rate-Limiting.
  2. GitLab의 속도 제한을 우회해야 하는 요청에 대해 로드 밸런서를 구성하여 Gitlab-Bypass-Rate-Limiting: 1을 설정합니다.
  3. 로드 밸런서를 구성하여 다음 중 하나를 수행합니다:
    • Gitlab-Bypass-Rate-Limiting을 지웁니다.
    • 속도 제한의 영향을 받아야 하는 모든 요청에 대해 Gitlab-Bypass-Rate-Limiting1이 아닌 값으로 설정합니다.
  4. 환경 변수 GITLAB_THROTTLE_BYPASS_HEADER를 설정합니다.
    • Linux package installations의 경우, gitlab_rails['env']'GITLAB_THROTTLE_BYPASS_HEADER' => 'Gitlab-Bypass-Rate-Limiting'를 설정합니다.
    • 자체 컴파일한 설치의 경우, /etc/default/gitlabexport GITLAB_THROTTLE_BYPASS_HEADER=Gitlab-Bypass-Rate-Limiting을 설정합니다.

로드 밸런서가 우회 헤더를 모든 수신 트래픽에 대해 지우거나 덮어써야 합니다. 그렇지 않은 경우 사용자가 해당 헤더를 설정하고 GitLab 속도 제한자를 우회할 수 있게 됩니다.

우회는 헤더가 1로 설정되어 있는 경우에만 작동합니다.

우회 헤더로 인해 속도 제한자를 우회한 요청은 production_json.log"throttle_safelist":"throttle_bypass_header"로 표시됩니다.

우회 메커니즘을 비활성화하려면 환경 변수 GITLAB_THROTTLE_BYPASS_HEADER가 해제되거나 비어 있도록 확인하십시오.

특정 사용자가 인증된 요청 속도 제한을 우회할 수 있도록 허용

위에서 설명한 우회 헤더와 유사하게, 일부 사용자 그룹이 속도 제한기를 우회할 수 있도록 설정할 수 있습니다. 이는 인증된 요청에만 적용되며, 인증되지 않은 요처의 경우 GitLab은 사용자를 식별하지 못합니다.

허용 디렉터리은 GITLAB_THROTTLE_USER_ALLOWLIST 환경 변수에서 사용자 ID의 쉼표로 구분된 디렉터리으로 구성됩니다. 인증된 요청 속도 제한을 우회하기를 원하는 사용자가 1, 53 및 217인 경우, 허용 디렉터리 구성은 1,53,217이 될 것입니다.

  • Linux 패키지 설치의 경우, gitlab_rails['env']에서 'GITLAB_THROTTLE_USER_ALLOWLIST' => '1,53,217'를 설정하세요.
  • 사용자가 직접 컴파일한 경우, /etc/default/gitlab에서 export GITLAB_THROTTLE_USER_ALLOWLIST=1,53,217를 설정하세요.

사용자 허용디렉터리으로 인해 속도 제한기를 우회한 요청은 production_json.log에서 "throttle_safelist":"throttle_user_allowlist"로 표시됩니다.

애플리케이션 시작 시, 허용디렉터리이 auth.log에 기록됩니다.

적용하기 전에 제한 설정을 시험해보세요

GITLAB_THROTTLE_DRY_RUN 환경 변수를 적용하여 제한 설정을 시험해볼 수 있습니다. 이 변수에는 쉼표로 구분된 제한 이름 디렉터리이 설정됩니다.

가능한 이름은 다음과 같습니다:

  • throttle_unauthenticated
    • GitLab 14.3부터 사용이 중단됨. 대신 throttle_unauthenticated_api 또는 throttle_unauthenticated_web을 사용하세요. throttle_unauthenticated는 아직 지원되며 둘 모두를 선택합니다.
  • throttle_unauthenticated_api
  • throttle_unauthenticated_web
  • throttle_authenticated_api
  • throttle_authenticated_web
  • throttle_unauthenticated_protected_paths
  • throttle_authenticated_protected_paths_api
  • throttle_authenticated_protected_paths_web
  • throttle_unauthenticated_packages_api
  • throttle_authenticated_packages_api
  • throttle_authenticated_git_lfs
  • throttle_unauthenticated_files_api
  • throttle_authenticated_files_api
  • throttle_unauthenticated_deprecated_api
  • throttle_authenticated_deprecated_api

예를 들어, 인증된 모든 요청에 대한 어린 사용 제한을 시험하려면 GITLAB_THROTTLE_DRY_RUN='throttle_authenticated_web,throttle_authenticated_api'로 설정할 수 있습니다.

모든 제한에 대해 dry run 모드를 활성화하려면 변수를 *로 설정하세요.

제한을 dry run 모드로 설정하면 제한이 한계에 도달할 때 요청을 계속 진행하면서 auth.log에 메시지가 기록됩니다. 로그 메시지에는 env 필드가 track로 설정되어 있으며, matched 필드에는 격발된 제한의 이름이 포함됩니다.

중요: 환경 변수 설정은 속도 제한을 설정하기 에 필요합니다. 관리자 지역의 설정은 즉시 적용되지만, 환경 변수 설정은 모든 Puma 프로세스를 다시 시작해야만 적용됩니다.