在 Debian 上运行的 GitLab 限速(rate limiting)通常可以从 GitLab 自身配置、Nginx(或 Omnibus 内置 Nginx)、以及 系统/网络层 三个层面来做。下面按常见场景给你说明。
GitLab(Omnibus 安装)内置了多种限速机制。
编辑:
sudo nano /etc/gitlab/gitlab.rb
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}
gitlab_rails['rate_limit_requests_per_period'] = 10
gitlab_rails['rate_limit_period'] = 60
gitlab_rails['api_rate_limit'] = 300 # 每用户每分钟
gitlab_rails['password_authentication_enabled'] = true
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
如果你用的是 Omnibus GitLab(自带 Nginx):
sudo nano /etc/gitlab/gitlab.rb
nginx['rate_limiting'] = {
'enabled' => true,
'limit_req_zone' => '$binary_remote_addr zone=one:10m rate=10r/s',
'limit_req' => 'zone=one burst=20 nodelay'
}
或手动在:
/var/opt/gitlab/nginx/conf/gitlab-http.conf
中加入:
limit_req_zone $binary_remote_addr zone=gitlab:10m rate=5r/s;
server {
limit_req zone=gitlab burst=10 nodelay;
}
然后:
sudo gitlab-ctl restart nginx
SSH 走的是系统 sshd,GitLab 本身不限制 SSH 速率。
如确实需要:
fail2ban示例(iptables):
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP
如果你希望限制 GitLab 服务器的带宽:
tc(流量控制)tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
| 场景 | 推荐方式 |
|---|---|
| 防止暴力破解 | GitLab Rack Attack |
| API 滥用 | GitLab API 限速 |
| Web 访问洪水 | Nginx limit_req |
| 带宽占用 | tc / 防火墙 |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置。