Как оценить ограничение по коду статуса HTTP с HAProxy? - PullRequest
0 голосов
/ 07 мая 2019

HAProxy предоставляет встроенный счетчик http_err_rate, который «сообщает о средней частоте ошибок HTTP-запросов за этот период». Это можно использовать в таблице привязки для ограничения скорости клиентов, которые генерируют много ошибок. Это может выглядеть примерно так:

frontend web
  tcp-request content reject if { src_get_gpc0(Abuse) gt 0 }
  acl scanner src_http_err_rate(Abuse) ge 10
  http-request deny if scanner flag_abuser

backend Abuse
  stick-table type ip size 1m expire 60m store gpc0,http_err_rate(20s)

То, что я хотел бы сделать, это отслеживать что-то вроде http_err_rate, но только для 401 Unauthorized кодов состояния. Таким образом, HAProxy будет заниматься только неавторизованными запросами, ограничивающими скорость, а не всеми кодами ошибок HTTP.

Спасибо!

1 Ответ

0 голосов
/ 02 июня 2019

Я хотел бы отслеживать что-то вроде http_err_rate, но только для 401 неавторизованных кодов состояния.

Вы можете использовать Счетчики общего назначения вместе с сопоставлением ACL для выборки status. В следующем примере конфигурации будет отслеживаться частота 404 ошибок для данного IP-адреса [1] и отклоняться запросы со статусом 429, если превышена скорость 10 запросов в 10 секунд:

frontend fe_http
    mode http
    bind *:8080

    stick-table type ipv6 size 10k expire 300s store gpc0_rate(10s)
    http-request  track-sc0 src
    http-request  deny deny_status 429 if { sc0_gpc0_rate gt 10 }
    # Relevant line below
    http-response sc-inc-gpc0(0) if { status 404 }

    default_backend be_http

backend be_http
    mode http
    server example example.com:80

[1] Примечание: я рекомендую использовать ipv6 в качестве ключа таблицы флешки, он может содержать адреса IPv4 и IPv6.

...