在 CentOS 上部署的 GitLab(通常是 Omnibus 包安装),“限流”可以从多个层面来做。下面按常见场景给你说明。
GitLab(尤其是 12+ 版本)自带多种限流功能,主要配置在 gitlab.rb 中。
编辑配置文件:
sudo vi /etc/gitlab/gitlab.rb
示例(限制 1 分钟内最多 10 次失败登录):
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}
应用配置:
sudo gitlab-ctl reconfigure
gitlab_rails['rate_limiting'] = {
'enabled' => true,
'rate' => 10, # 每秒请求数
'burst' => 20 # 突发请求数
}
gitlab_rails['rack_attack'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'throttle_unauthenticated_git_http' => {
'enabled' => true,
'limit' => 100,
'period' => 60
}
}
GitLab 的 SSH 走系统 sshd,可修改:
sudo vi /etc/ssh/sshd_config
例如限制单 IP 连接:
MaxSessions 5
MaxStartups 10:30:60
重启:
sudo systemctl restart sshd
GitLab 使用内置 Nginx,可直接加限流规则。
nginx['enable'] = true
nginx['rate_limiting'] = {
'enabled' => true,
'limit_req_zone' => '$binary_remote_addr zone=one:10m rate=5r/s',
'limit_req' => 'zone=one burst=10 nodelay'
}
应用:
sudo gitlab-ctl reconfigure
firewall-cmd --permanent --add-rich-rule='rule service name="http" limit value="10/m" accept'
firewall-cmd --reload
如果你在 GitLab 前加了 Nginx / HAProxy / Kubernetes Ingress,限流应在那一层做,效率更高。
✅ GitLab 自带 throttle(防爆破)
✅ Nginx limit_req(防刷接口)
✅ 防火墙限制异常 IP
如果你能补充说明:
我可以给你一套精确配置示例。