AI中转站限流防刷GPU算力耗尽配置
为什么你的AI中转站需要限流防刷
运营AI中转站(比如基于one-api或新-api的代理服务)时,最怕的不是用户多,而是被恶意刷量。
某个IP或Token一瞬间发起数千个并发请求,直接把你后端的vLLM、Ollama或GPU实例打满,导致GPU算力耗尽、接口超时、费用飙升。
限流和防刷配置正是解决这个问题的直接手段,它会按规则拒绝超出阈值的请求,保障正常用户可用。
动手配置前的软硬件清单
开始操作前,请确保你具备以下条件:
- 服务器:Linux系统(Ubuntu 22.04或CentOS 7+),已安装Nginx或OpenResty;如果使用了可视化面板(如宝塔),同样支持添加自定义规则。
- AI代理程序:常见的one-api、new-api或自建网关,运行在本地端口(如3000)。
- 管理员权限:能执行
sudo命令或直接在面板编辑配置文件。 - 监控工具:推荐
ab(Apache Bench)或wrk用于后续验证,安装命令:sudo apt install apache2-utils或sudo yum install httpd-tools。
Nginx层面的限流配置步骤
Nginx是目前最常用的反向代理,限流功能通过ngx_http_limit_req_module实现。
以下是针对AI中转站API端点的典型配置:
- 编辑Nginx配置文件(一般位于
/etc/nginx/nginx.conf或站点配置文件中)。 - 在http块内定义限流区域:
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
# 解释:以客户端IP为键,分配10MB共享内存,限制平均每秒最多5个请求。
...
}
- 在server/location块应用规则(假设你的AI中转站路径为
/v1/chat/completions):
server {
location /v1/ {
limit_req zone=api_limit burst=10 nodelay;
proxy_pass http://127.0.0.1:3000; # 你的AI代理服务地址
...
}
}
配置解释:burst=10表示允许瞬时超出的请求数(排队),nodelay表示不延迟直接处理但超出burst的请求直接拒绝。
建议初次设置较宽松的值(如5r/s,burst=10),运行稳定后再收紧。
- 保存并重载Nginx:
sudo nginx -t检查语法,无误后执行sudo systemctl reload nginx。
应用层(one-api)的频率控制
如果你的AI中转站使用了one-api,它内置了更精细的限流和防刷功能。
登录后台,按以下路径操作:
- 设置 → 系统设置 → 频率限制:开启“启用频率限制”,填入“全局速率”(如每分钟60次,即每IP约1r/s)。
- 令牌管理 → 编辑令牌 → 速率限制:可以为每个API Key单独设置限额,适合区分付费用户和免费用户。
- IP白名单:将内部调用或可信来源加入白名单,避免被限流误伤。
注意:应用层限流和Nginx限流可以同时启用,Nginx作为第一道防线挡住大部分恶意流量,one-api用于精细控制。
配置后如何验证限流是否生效
用压力测试工具模拟高频请求,观察返回状态码:
- 单IP并发测试(使用ab发送100个请求,并发10):
ab -n 100 -c 10 http://你的域名/v1/chat/completions -H "Authorization: Bearer sk-your-key"
- 检查结果:正常情况应看到部分请求返回
503 Service Temporarily Unavailable(Nginx拒绝)或429 Too Many Requests(one-api返回)。如果所有请求都成功,说明限流没生效,需回看配置。 - 查看日志:Nginx错误日志通常记录限流拒绝信息:
grep 'limiting requests' /var/log/nginx/error.log。
避坑:限流误杀与白名单设置
常见错误是限流阈值设置过低,导致正常用户的批量上传或流式对话被拦截。
建议:
- 区分流量:对
/v1/chat/completions等对话接口设置较宽松的限流(如10r/s),对/v1/embeddings等批量任务设置更严格限制(如2r/s)。 - 动态调整:先用宽松值运行一周,根据CPU/GPU使用率和错误率逐步收紧。
- IP池误判:若你的用户来自固定出口IP(企业网络),建议将该IP加入Nginx的geo白名单:
geo $white_ip { default 0; 8.8.8.0/24 1; },然后在limit_req前跳过白名单。
常见问题解答
Q:限流后正常用户收到503怎么办?
A:可以增大burst值或提高rate;如果仍不够,考虑按令牌分组设置不同限额(如VIP用户更高阈值)。
Q:如何防止恶意用户更换IP绕过?
A:单靠IP限流不够,可配合令牌(API Key)限流、行为分析(如短时间内请求多个模型)或接入Cloudflare WAF。
Q:GPU算力耗尽后自动恢复吗?
A:限流只拒绝入口请求,不会自动清理已占用的GPU资源。建议同时配置监控告警(如Prometheus + Alertmanager),在GPU使用率超过90%时触发限流降级或自动重启。
配置完成后,你的AI中转站就拥有了一层基本的防刷保护。
建议定期查看日志和性能指标,根据实际负载微调参数,这样既能保护GPU算力不被耗尽,又不影响正常用户体验。