如何在Haproxy中基于url参数形成棍子表

时间:2019-06-24 12:25:56

标签: haproxy

我有客户可以访问的以下URL。

/AnEndPoint?User=<user_emailid>&DeviceId=<device_id>

我想根据User + DeviceId组合对用户进行分级。

例如,一个具有DeviceId 123的用户A发出的请求数/秒以上应添加到存储卡表中,并且进一步的请求被拒绝

我在这里看到https://cbonte.github.io/haproxy-dconv/1.6/configuration.html#7.3.6-url_param

我这里有一些在Deviceid上工作的示例配置,如何将其扩展为还存储useremail + Deviceid并仅在这些ID上进行阻止。

frontend frontend1

    http-request set-var(txn.email) urlp(User)
    http-request set-var(txn.deviceid) urlp(DeviceId)
    http-request deny if { var(txn.deviceid),table_http_req_rate(Abuse) ge 10 }

    http-request track-sc0 var(txn.deviceid) table Abuse


backend somebackend
   stick store-request var(txn.deviceid)  table Abuse #ONLY STORING DEVICEID ,HOW TO STORE EMAIL WITH IT TOO?
backend Abuse
 stick-table type string size 100K expire 30m store http_req_rate(10s)

我在理解如何插入和增加每个请求的查询字符串在stick table中生成的值时遇到问题。

1 个答案:

答案 0 :(得分:0)

最终这样做了。

backend Backend1
    http-request set-header  UserInfo       %[urlp(User)]%[urlp(DeviceId)]
    stick store-request hdr(UserInfo) table Abuse
    http-request track-sc0 hdr(UserInfo) table Abuse
    http-request deny if { hdr(UserInfo),table_http_req_rate(Abuse) ge 5 }