温馨提示×

debian gitlab如何限流

小樊
47
2026-09-23 18:53:03
栏目: 智能运维

在 Debian 上运行的 GitLab(通常是 Omnibus 安装)可以通过 Nginx 限流 和 GitLab 自身配置 来实现限流。下面按常见场景说明。


一、最常见方式:Nginx 限流(推荐)

GitLab Omnibus 自带 Nginx,限流主要在 Nginx 层做。

1. 编辑 GitLab 配置

sudo vim /etc/gitlab/gitlab.rb

2. 配置限流示例

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

含义:

  • 10r/s:每个 IP 每秒最多 10 个请求
  • burst=20:允许突发 20 个请求
  • nodelay:突发请求不延迟处理

3. 只对 API 或登录限流(更实用)

nginx['custom_gitlab_server_config'] = <<-EOS
  location ~ ^/api/ {
    limit_req zone=one burst=10 nodelay;
    proxy_pass http://gitlab-workhorse;
  }
EOS

4. 重新加载配置

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart nginx

二、限制 Git 操作(push / clone)频率

方法 1:限制 /git/ 路径

nginx['custom_gitlab_server_config'] = <<-EOS
  location ~ ^/.*\.git/ {
    limit_req zone=git burst=5 nodelay;
    proxy_pass http://gitlab-workhorse;
  }
EOS
nginx['rate_limiting'] = {
  'enabled' => true,
  'limit_req_zone' => '$binary_remote_addr zone=git:10m rate=5r/s'
}

三、GitLab 自身限流(应用层)

1. 限流 API(GitLab 16+)

gitlab_rails['rate_limiting'] = {
  'enabled' => true,
  'api_request_limit' => 100,
  'api_request_limit_period' => 60
}

含义:每个用户每 60 秒最多 100 次 API 请求

2. 登录失败限流

gitlab_rails['rate_limiting'] = {
  'enabled' => true,
  'login_failed_attempts' => 5,
  'login_lockout_period' => 300
}

四、防止暴力破解(SSH)

使用 fail2ban(推荐)

sudo apt install fail2ban
sudo vim /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
bantime = 3600
sudo systemctl restart fail2ban

五、验证是否生效

ab -n 100 -c 20 https://gitlab.example.com/

或看 Nginx 日志:

sudo tail -f /var/log/gitlab/nginx/gitlab_access.log

出现 503 或 limit_req 说明限流生效。


六、总结建议

场景 推荐方式
防刷接口 Nginx 限流
防暴力登录 GitLab + fail2ban
控制 Git 流量 Nginx /git/
控制 API GitLab rate_limiting

如果你能说明:

  • GitLab 版本
  • Omnibus 还是源码
  • 想限 IP / 用户 / API / Git

我可以给你更精确的配置。

0 踩