Help us learn about your current experience with the documentation. Take the survey.

速率限制

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

对于 GitLab.com,请参阅 GitLab.com 特定的速率限制

速率限制是一种常见的技术,用于提高 Web 应用程序的安全性和稳定性。

例如,一个简单的脚本每秒可以发出数千个 Web 请求。这些请求可能是:

  • 恶意的。
  • 无意的。
  • 只是程序错误。

您的应用程序和基础设施可能无法承受这种负载。更多详情,请参阅 拒绝服务攻击。 大多数情况可以通过限制来自单个 IP 地址的请求速率来缓解。

大多数暴力破解攻击也通过速率限制得到类似缓解。

API 请求的速率限制不会影响前端发出的请求,因为这些请求始终被计为 Web 流量。

可配置的限制

您可以在实例的管理员区域设置这些速率限制:

您可以使用 ApplicationSettings API 设置这些速率限制:

您可以使用 Rails 控制台设置这些速率限制:

Git 和容器注册表的认证失败封禁

如果单个 IP 地址在 3 分钟内收到 30 次失败的认证请求,GitLab 将在 1 小时内返回 HTTP 状态码 403。这仅适用于组合的:

  • Git 请求。
  • 容器注册表 (/jwt/auth) 请求。

此限制:

  • 通过成功认证的请求重置。例如,29 次失败的认证请求后跟 1 次成功请求,然后再跟 29 次失败的认证请求不会触发封禁。
  • 不适用于由 gitlab-ci-token 认证的 JWT 请求。
  • 默认情况下禁用。

不提供响应头。

为了避免被速率限制,您可以:

有关配置信息,请参阅 Linux 包配置选项

不可配置的限制

仓库归档

存在下载仓库归档的速率限制。 该限制适用于项目以及通过 UI 或 API 发起下载的用户。

速率限制为每用户每分钟 5 次请求。

Webhook 测试

存在测试 webhook的速率限制,这可以防止滥用 webhook 功能。

速率限制为每用户每分钟 5 次请求。

用户注册

/users/sign_up 端点存在每个 IP 地址的速率限制。这是为了缓解滥用该端点的尝试。例如,批量发现正在使用的用户名或电子邮件地址。

速率限制为每个 IP 地址每分钟 20 次调用。

更新用户名

存在更改用户名频率的速率限制。这是为了缓解滥用该功能。例如,批量发现哪些用户名正在使用。

速率限制为每个认证用户每分钟 10 次调用。

用户名存在

内部端点 /users/:username/exists 存在速率限制,该端点在注册时用于检查所选用户名是否已被占用。这是为了缓解滥用风险,例如批量发现正在使用的用户名。

速率限制为每个 IP 地址每分钟 20 次调用。

项目作业 API 端点

端点 project/:id/jobs 存在速率限制,这是为了在获取作业时减少超时。

速率限制默认为每个认证用户 600 次调用。您可以配置速率限制

AI 操作

GraphQL aiAction 变量存在速率限制,这是为了防止滥用此端点。

速率限制为每个认证用户每 8 小时 160 次调用。

使用 API 删除成员

存在使用 API 端点删除项目或群组成员 /groups/:id/members/project/:id/members 的速率限制。

速率限制为每分钟 60 次删除操作。

仓库 blob 和文件访问

通过特定仓库 API 端点访问大文件时应用速率限制。 对于大于 10 MB 的文件,速率限制为每个对象每个项目每分钟 5 次调用,适用于:

这些限制有助于防止通过 API 访问大型仓库文件时过度使用资源。

通知邮件

与项目或群组相关的通知邮件存在速率限制。

速率限制为每个项目或群组每个用户每 24 小时 1,000 条通知。

GitHub 导入

触发从 GitHub 导入项目存在速率限制。

速率限制为每个用户每分钟 6 次触发导入。

FogBugz 导入

触发从 FogBugz 导入项目存在速率限制。

速率限制为每个用户每分钟 1 次触发导入。

提交差异文件

这是针对展开的提交差异文件(/[group]/[project]/-/commit/[:sha]/diff_files?expanded=1)的速率限制,这是为了防止滥用此端点。

速率限制为每个认证用户或每个未认证 IP 地址每分钟 6 次请求。

变更日志生成

/:id/repository/changelog 端点存在每个用户每个项目的速率限制。这是为了缓解滥用该端点的尝试。 速率限制在 GET 和 POST 操作之间共享。

速率限制为每个用户每个项目每分钟 5 次调用。

故障排除

Rack Attack 正在封禁负载均衡器

如果所有流量都来自负载均衡器,Rack Attack 可能会阻止您的负载均衡器。在这种情况下,您必须:

  1. 配置 nginx[real_ip_trusted_addresses]。 这可以防止用户的 IP 被列为负载均衡器 IP。

  2. 将负载均衡器的 IP 地址加入白名单。

  3. 重新配置 GitLab:

    sudo gitlab-ctl reconfigure

使用 Redis 从 Rack Attack 移除被封禁的 IP

要移除被封禁的 IP:

  1. 在生产日志中查找被封禁的 IP:

    grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
  2. 封禁列表存储在 Redis 中,因此您必须打开 redis-cli

    /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
  3. 您可以使用以下语法移除封禁,将 <ip> 替换为实际被封禁的 IP:

    del cache:gitlab:rack::attack:allow2ban:ban:<ip>
  4. 确认不再显示包含该 IP 的键:

    keys *rack::attack*

    默认情况下,keys 命令被禁用

  5. 可选地,将 IP 加入白名单 以防止再次被封禁。