Skip to content

Instantly share code, notes, and snippets.

@haproxytechblog
Created December 13, 2023 18:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haproxytechblog/374133870f54188f75337476ec5c637a to your computer and use it in GitHub Desktop.
Save haproxytechblog/374133870f54188f75337476ec5c637a to your computer and use it in GitHub Desktop.
Rate limiting based on AWS VPC ID
rates.map:
<vpce_id>,/path <limit>
<vpce_id>,/path <limit>
<vpce_id>,/path <limit>
vpc-01234567890abcdef,/api 30
frontend fe_main
bind :80 accept-proxy
http-request set-var(txn.vpce_id) fc_pp_tlv(0xEA),bytes(1)
http-request set-var-fmt(txn.vpcratekey) "%[var(txn.vpce_id)],%[path]"
http-request set-var-fmt(txn.vpctrackkey) "%[var(txn.vpce_id)],%[path],%[src]"
http-request set-var(req.vpcrate_limit) var(txn.vpcratekey),map_beg(/var/lib/dataplaneapi/storage/maps/rates.map,20)
backend ratebyvpc
stick-table type binary size 1073741824 expire 120000 peers "$peers_section_name" store http_req_rate(1m)
backend ratebyvpc.agg
stick-table type binary size 1073741824 expire 120000 peers "$peers_section_name" store http_req_rate(1m)
http-request track-sc0 var(txn.vpctrackkey) table ratebyvpc
http-request set-var(req.vpcrequest_rate) var(txn.vpctrackkey),table_http_req_rate(ratebyvpc.agg)
acl vpc_rate_abuse var(req.vpcrate_limit),sub(req.vpcrequest_rate) lt 0
http-request deny deny_status 429 if vpc_rate_abuse
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment