在 Debian 上部署的 GitLab,限制“流量”通常可以从网络层、GitLab 本身、反向代理、以及存储/API 层面来做。下面按常见场景给你一套可落地方案。
iptables / nftables 限制带宽适合:限制某个 IP、某个端口的总流量。
示例(iptables + tc 思路简化版)
# 限制 192.168.1.100 访问 GitLab(80/443) 带宽为 1M
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 80 -j DROP
但 iptables 本身不限制带宽,需要配合 tc:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
更推荐用 nftables + tc 或直接使用下面反向代理方案。
GitLab 默认使用 Nginx,可以直接改配置。
编辑:
/etc/gitlab/gitlab.rb
添加:
nginx['limit_req_zone'] = '
$binary_remote_addr zone=gitlab_limit:10m rate=10r/s;
'
nginx['limit_req'] = '
zone=gitlab_limit burst=20 nodelay;
'
然后:
gitlab-ctl reconfigure
✅ 效果:单 IP 每秒最多 10 个请求
GitLab 的 Nginx 支持:
nginx['client_max_body_size'] = "100m"
限速(需手动改 nginx 配置):
location / {
limit_rate 500k;
}
路径:
/var/opt/gitlab/nginx/conf/gitlab-http.conf
⚠️ 改完需:
gitlab-ctl restart nginx
GitLab 本身有速率限制:
gitlab_rails['rate_limit_requests_per_period'] = 10
gitlab_rails['rate_limit_period'] = 60
还可限制:
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1"],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}
gitlab-ctl reconfigure
iptableslimit_rategitlab_rails['git_max_size'] = 524288000 # 500MB
如果你在 GitLab 前还有 Nginx:
limit_req_zone $binary_remote_addr zone=gitlab:10m rate=5r/s;
server {
location / {
limit_req zone=gitlab burst=10 nodelay;
limit_rate 1m;
}
}
| 需求 | 推荐方式 |
|---|---|
| 防刷 / 防攻击 | GitLab Rack Attack |
| 限制单 IP 请求 | Nginx limit_req |
| 限制下载速度 | Nginx limit_rate |
| 限制总带宽 | tc / 前置防火墙 |
| 限制 Git 滥用 | git_max_size + Nginx |
如果你能说清楚:
我可以给你一份精确配置文件。