温馨提示×

linux gitlab如何限流

小樊
33
2026-09-01 13:46:31
栏目: 智能运维

在 Linux 上部署的 GitLab(Omnibus 或源码版)中,“限流”通常指防止暴力破解、API 滥用、Web 请求过载等。下面按常见场景 + 配置方式说明。


一、GitLab 自带限流(推荐优先用)

1. 用户登录限流(防暴力破解)

编辑配置文件:

sudo vim /etc/gitlab/gitlab.rb

添加或修改:

gitlab_rails['rate_limit_requests_per_period'] = 10
gitlab_rails['rate_limit_period'] = 60

重新加载:

sudo gitlab-ctl reconfigure

✅ 效果:每 60 秒最多 10 次登录尝试


2. API 请求限流

gitlab_rails['api_rate_limit'] = 300

表示:每个用户每分钟最多 300 次 API 请求


3. 未登录用户(匿名)限流

gitlab_rails['unauthenticated_api_rate_limit'] = 60
gitlab_rails['unauthenticated_requests_rate_limit'] = 60

二、GitLab 内置 Rack Attack(IP 级限流)

GitLab 使用 rack-attack 防止恶意 IP。

启用并配置

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1"],
  'maxretry' => 10,
  'findtime' => 60,
  'bantime' => 3600
}

说明:

  • 60 秒内失败 10 次
  • 封禁 1 小时
sudo gitlab-ctl reconfigure

三、Nginx 层限流(Web 层,非常常用)

如果你用 GitLab 自带的 Nginx:

1. 限制单 IP 请求速率

nginx['rate_limiting'] = {
  'enabled' => true,
  'limit_req_zone' => 'zone=one:10m rate=10r/s',
  'limit_req' => 'burst=20 nodelay'
}

或手动加 Nginx 配置:

limit_req_zone $binary_remote_addr zone=gitlab:10m rate=5r/s;

server {
    limit_req zone=gitlab burst=10 nodelay;
}

四、Git Over SSH 限流(较难)

GitLab 不直接限流 SSH,可通过:

  • fail2ban
  • 系统层 pam / sshd 限制

示例(fail2ban):

[gitlab-ssh]
enabled = true
filter = sshd
maxretry = 5
bantime = 3600

五、CI/CD 并发限流

gitlab_ci['concurrent'] = 10

限制 Runner 并发任务数。


六、推荐组合方案 ✅

场景 方案
防暴力登录 rack-attack
防 API 刷爆 api_rate_limit
防 Web 层攻击 Nginx limit_req
防 SSH 爆破 fail2ban
控制资源 CI concurrent

七、验证是否生效

sudo gitlab-ctl tail nginx
sudo gitlab-ctl tail gitlab-rails

如果你能说明:

  • ✅ GitLab 版本
  • ✅ Omnibus 还是 Docker
  • ✅ 想限 登录 / API / Web / SSH / CI

我可以给你精确配置模板

0