Назад | Перейти на главную страницу

HAProxy: ограничение одновременных подключений на основе поля заголовка HTTP

Я пытаюсь ограничить количество одновременных подключений, используя стик-таблицы HAProxy на основе полей заголовка HTTP. Я мог найти множество примеров использования IP-адресов, но в моем случае это не работает. Наше приложение отличается учетной записью пользователя только по полю заголовка HTTP x-account и ожидает, что запросы поступают одновременно с нескольких IP-адресов.

На данный момент я не могу предоставить ни одного сообщения об ошибке или чего-либо еще, так как я пока не мог понять конфигурацию. Таким образом, это очень простой вопрос об использовании / настройке HAProxy.

Из того, что я понял после прочтения документации HAProxy:

Я определяю стик-стол следующим образом:

stick-table type string size 100m store conn_cur

Это должно предоставить мне таблицу для хранения полей заголовка. Я не добавлял expire, так как на самом деле мне все равно, и значения в любом случае будут сильно повторяться. Также ее не ожидают намного больше, чем 5-10 тысяч записей, то есть разных учетных записей.

До сих пор документация была довольно ясной, но с этого и начинаются мои проблемы. Думаю, мне нужна строка, которая сообщает HAProxy, что он должен связать значение поля заголовка с соединением и сообщить, что оно открывается и в конечном итоге закрывается. Может ли это быть что-то вроде этого?

stick store-request hdr(x-account) account_table

Кроме того, должна быть строка, которая отклоняет / блокирует запрос, если превышено максимальное количество сеансов для этого пользователя. Что-то вроде этого, я думаю:

http-request tarpit if hdr(x-account) account_table gt 10

По крайней мере, это то, чего я ожидал, но, возможно, я полностью ошибаюсь. Как я уже сказал, я не смог найти ни одного примера использования строк в таблице из стикеров. Если это поможет, я могу предоставить полную конфигурацию HAProxy, но я думаю, что это не актуально, поскольку это всего лишь часть определения внешнего интерфейса, верно?

Любая помощь приветствуется.

Привет, Ральф