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

HAProxy: маршрутизация по учетным данным Basic Auth

У меня много запросов, поступающих с одного 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)
 ...