Я пытаюсь ограничить количество одновременных подключений, используя стик-таблицы 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, но я думаю, что это не актуально, поскольку это всего лишь часть определения внешнего интерфейса, верно?
Любая помощь приветствуется.
Привет, Ральф