У меня много запросов, поступающих с одного IP-адреса с учетными данными, предоставленными в заголовке HTTP в формате Basic Auth. Несмотря на то, что происхождение одинаково, учетные данные часто различаются в зависимости от запроса.
Это API, который получает много преимуществ от наличия кеша в памяти. Однако для того, чтобы этот кеш работал, мне нужно иметь возможность направлять запросы с определенным набором учетных данных на тот же компьютер.
Это означает, что мне нужно придумать решение маршрутизации, которое каким-то образом «прикрепляет» определенные учетные данные к одной машине на определенный период времени, скажем, 30 минут, но также распределяет еще не подключенные учетные данные в циклическом режиме.
Возможно ли это с HAProxy?
Да, HAProxy может балансировать по любому заголовку запроса, отправляемому браузером. Из руководство:
hdr(name) The HTTP header <name> will be looked up in each HTTP request.
Just as with the equivalent ACL 'hdr()' function, the header
name in parenthesis is not case sensitive. If the header is
absent or if it does not contain any value, the round-robin
algorithm is applied instead.
В случае базовой аутентификации каждый запрос будет аутентифицирован с помощью Authorization
заголовок, который принимает форму Authorization: Basic <base64(username+password)>
. Итак, в вашей конфигурации HAProxy должно работать следующее:
...
balance roundrobin
balance hdr(Authorization)
...