- 비인증 API 요청 속도 제한 활성화
- 인증되지 않은 웹 요청 속도 제한 활성화
- 인증된 API 요청 속도 제한 활성화
- 인증된 웹 요청 속도 제한 활성화
- 사용자 정의 속도 제한 응답 사용
- 분당
project/:id/jobs
의 최대 인증된 요청 수 - 응답 헤더
- 속도 제한 우회를 위한 HTTP 헤더 사용
- 특정 사용자가 인증된 요청 속도 제한을 우회할 수 있도록 허용
- 적용하기 전에 제한 설정을 시험해보세요
사용자 및 IP 속도 제한
속도 제한은 웹 응용 프로그램의 보안과 내구성을 향상시키는 데 사용되는 일반적인 기술입니다. 자세한 내용은 속도 제한을 참조하십시오.
다음 제한 사항은 기본적으로 비활성화됩니다:
비인증 API 요청 속도 제한 활성화
비인증 API 요청 속도 제한을 활성화하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
비인증 API 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. IP 당 단위 시간당 최대 비인증 API 요청 값을 업데이트하십시오. 기본값은
3600
입니다. - 선택 사항. 초당 비인증 속도 제한 기간 값을 업데이트하십시오. 기본값은
3600
입니다.
- 선택 사항. IP 당 단위 시간당 최대 비인증 API 요청 값을 업데이트하십시오. 기본값은
인증되지 않은 웹 요청 속도 제한 활성화
비인증 요청 속도 제한을 활성화하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
비인증된 웹 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. IP 당 단위 시간당 최대 비인증된 웹 요청 값을 업데이트하십시오. 기본값은
3600
입니다. - 선택 사항. 초당 비인증 속도 제한 기간 값을 업데이트하십시오. 기본값은
3600
입니다.
- 선택 사항. IP 당 단위 시간당 최대 비인증된 웹 요청 값을 업데이트하십시오. 기본값은
인증된 API 요청 속도 제한 활성화
인증된 API 요청 속도 제한을 활성화하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증된 API 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. 사용자 단위 시간당 최대 인증된 API 요청 값을 업데이트하십시오. 기본값은
7200
입니다. - 선택 사항. 인증된 API 속도 제한 기간(초) 값을 업데이트하십시오. 기본값은
3600
입니다.
- 선택 사항. 사용자 단위 시간당 최대 인증된 API 요청 값을 업데이트하십시오. 기본값은
인증된 웹 요청 속도 제한 활성화
인증된 요청 속도 제한을 활성화하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
인증된 웹 요청 속도 제한 활성화를 선택합니다.
- 선택 사항. 사용자 단위 시간당 최대 인증된 웹 요청 값을 업데이트하십시오. 기본값은
7200
입니다. - 선택 사항. 인증된 웹 속도 제한 기간(초) 값을 업데이트하십시오. 기본값은
3600
입니다.
- 선택 사항. 사용자 단위 시간당 최대 인증된 웹 요청 값을 업데이트하십시오. 기본값은
사용자 정의 속도 제한 응답 사용
속도 제한을 초과하는 요청은 429
응답 코드와 기본적으로 나중에 다시 시도하십시오
라는 평문 본문이 반환됩니다.
사용자 정의 응답을 사용하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
- 클라이언트에 보낼 평문 응답 텍스트 상자에 평문 응답 메시지를 추가하십시오.
분당 project/:id/jobs
의 최대 인증된 요청 수
- GitLab 16.5에서 도입되었습니다.
타임아웃을 줄이기 위해 project/:id/jobs
엔드포인트의 기본 속도 제한은 인증된 사용자 당 1분당 600회의 호출로 설정됩니다.
최대 요청 수를 수정하려면:
- 좌측 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 네트워크를 선택합니다.
- 사용자 및 IP 속도 제한을 확장합니다.
-
분당
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 앞에 있는 역방향 프록시에서 속도 제한자를 우회해야 하는 요청에 대해 사용자 정의 헤더를 지정합니다. 예를 들어:
- 우회 헤더의 이름을 선택합니다. 예:
Gitlab-Bypass-Rate-Limiting
. - GitLab의 속도 제한을 우회해야 하는 요청에 대해 로드 밸런서를 구성하여
Gitlab-Bypass-Rate-Limiting: 1
을 설정합니다. - 로드 밸런서를 구성하여 다음 중 하나를 수행합니다:
-
Gitlab-Bypass-Rate-Limiting
을 지웁니다. - 속도 제한의 영향을 받아야 하는 모든 요청에 대해
Gitlab-Bypass-Rate-Limiting
을1
이 아닌 값으로 설정합니다.
-
- 환경 변수
GITLAB_THROTTLE_BYPASS_HEADER
를 설정합니다.-
Linux package installations의 경우,
gitlab_rails['env']
에'GITLAB_THROTTLE_BYPASS_HEADER' => 'Gitlab-Bypass-Rate-Limiting'
를 설정합니다. - 자체 컴파일한 설치의 경우,
/etc/default/gitlab
에export GITLAB_THROTTLE_BYPASS_HEADER=Gitlab-Bypass-Rate-Limiting
을 설정합니다.
-
Linux package installations의 경우,
로드 밸런서가 우회 헤더를 모든 수신 트래픽에 대해 지우거나 덮어써야 합니다. 그렇지 않은 경우 사용자가 해당 헤더를 설정하고 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
는 아직 지원되며 둘 모두를 선택합니다.
- GitLab 14.3부터 사용이 중단됨. 대신
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 프로세스를 다시 시작해야만 적용됩니다.