You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HAProxy:如何通过Stick-Table实现活跃用户阈值后拦截新用户请求

实现HAProxy活跃用户阈值后限制新用户连接

这个需求完全可以实现,只需要调整HAProxy的条件判断逻辑,利用stick-table的lookup功能检查Client-ID是否存在于活跃用户表中即可。以下是修改后的完整配置:

frontend echo
    bind *:8881
    mode http

    # 定义活跃用户规则:30秒内有请求则视为活跃,同时统计10秒内的请求率
    stick-table type string size 100k expire 30s store gpc0_rate(10s) 
    # 当活跃用户数未达阈值(100)时,将新的Client-ID加入活跃表跟踪
    http-request track-sc0 req.hdr(Client-ID) if { table_cnt lt 100 } 
    # 核心逻辑:活跃用户数达标后,拒绝所有不在活跃表中的Client-ID请求
    http-request deny deny_status 429 if { table_cnt ge 100 } { ! table lookup sc0 req.hdr(Client-ID) }

    use_backend echo

关键配置解释

  • ! table lookup sc0 req.hdr(Client-ID):这个条件用来判断当前请求的Client-ID不存在于编号为sc0的stick-table中。!符号表示取反,结合前面的table_cnt ge 100(活跃用户数≥100),就能精准实现“阈值达标后拒绝新用户”的需求。
  • 保留原配置中http-request track-sc0的{ table_cnt lt 100 }条件,确保只有在活跃用户数未达上限时,才会将新的Client-ID加入表中,严格控制活跃用户的数量上限。

注意事项

  • 要确保Client-ID请求头是客户端的唯一标识,避免出现重复或伪造的情况,否则会导致活跃用户统计不准确。
  • stick-table的size设置为100k,远大于阈值100,足够容纳正常的活跃用户数据。
  • expire 30s参数会自动移除超过30秒无请求的用户,释放名额给新用户,保证活跃用户列表的时效性。

内容的提问来源于stack exchange,提问作者kozmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:23:25