From b57d3992123348773a2cdd9e2f85e8cf2036a052 Mon Sep 17 00:00:00 2001 From: Mayra Cabrera Date: Fri, 16 Aug 2019 12:20:17 +0000 Subject: [PATCH] Add docs for rate limiter on raw endpoints The section was included on security/raw_limits and on the admin area settings. Related to https://gitlab.com/gitlab-org/gitlab-ce/issues/48717 --- doc/security/rate_limits.md | 5 +++-- .../img/rate_limits_on_raw_endpoints.png | Bin 0 -> 58254 bytes .../settings/rate_limits_on_raw_endpoints.md | 20 ++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 doc/user/admin_area/settings/img/rate_limits_on_raw_endpoints.png create mode 100644 doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md diff --git a/doc/security/rate_limits.md b/doc/security/rate_limits.md index 0e5bdcd9c79..c80f2f264b2 100644 --- a/doc/security/rate_limits.md +++ b/doc/security/rate_limits.md @@ -22,11 +22,12 @@ similarly mitigated by a rate limit. ## Admin Area settings -See -[User and IP rate limits](../user/admin_area/settings/user_and_ip_rate_limits.md). +- [User and IP rate limits](../user/admin_area/settings/user_and_ip_rate_limits.md). +- [Rate limits on raw endpoints](../user/admin_area/settings/rate_limits_on_raw_endpoints.md) ## Rack Attack initializer This method of rate limiting is cumbersome, but has some advantages. It allows throttling of specific paths, and is also integrated into Git and container registry requests. See [Rack Attack initializer](rack_attack.md). + diff --git a/doc/user/admin_area/settings/img/rate_limits_on_raw_endpoints.png b/doc/user/admin_area/settings/img/rate_limits_on_raw_endpoints.png new file mode 100644 index 0000000000000000000000000000000000000000..c32eb93c8a87dfa35c628369eb024882c50bf7de GIT binary patch literal 58254 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 literal 0 HcmV?d00001 diff --git a/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md b/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md new file mode 100644 index 00000000000..b2d56be154b --- /dev/null +++ b/doc/user/admin_area/settings/rate_limits_on_raw_endpoints.md @@ -0,0 +1,20 @@ +--- +type: reference +--- + +# Rate limits on raw endpoints **(CORE ONLY)** + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/30829) in GitLab 12.2. + +This setting allows you to rate limit the requests to raw endpoints, defaults to `300` requests per minute. +It can be modified in **Admin Area > Network > Performance Optimization**. + +For example, requests over `300` per minute to `https://gitlab.com/gitlab-org/gitlab-ce/raw/master/app/controllers/application_controller.rb` will be blocked. + +![Rate limits on raw endpoints](img/rate_limits_on_raw_endpoints.png) + +This limit is: + +- Applied independently per project, per commit and per file path. +- Not applied per IP address. +- Active by default. To disable, set the option to `0`.