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

Есть ли способ настроить HAProxy для отправки трафика на основе cookie?

При настройке HAProxy я хотел бы отправлять трафик на определенные серверы в зависимости от наличия файла cookie.

Например:

  1. Есть сервер HAProxy и 2 веб-сервера (serverA и serverB).
  2. Когда кто-то входит в систему, создается файл cookie «loginCreds = user: company».
  3. Когда входит Джон из CompanyA, его файл cookie имеет вид «loginCreds = John: CompanyA».
  4. Затем его трафик будет направлен на serverA.

Возможно ли это, и если да, то как это настроить?

Да, это возможно, но вам нужно будет настроить / протестировать эту конфигурацию самостоятельно. Это должно выглядеть примерно так:

Заметка: Это только проверяет, установлен ли заголовок «Cookie:» на «CompanyA» или «CompanyB» с учетом регистра. Вы можете поиграть со значениями, и если вы хорошо разбираетесь в регулярных выражениях, вы можете вместо этого использовать hdr_reg (Cookie).

frontend read_cookies
    bind    :80
    mode    http

    acl is_companya hdr(Cookie) CompanyA
    acl is_companyb hdr(Cookie) CompanyB

    use_backend company_a if is_companya
    use_backend company_b if is_companyb

    default_backend company_c

backend company_a
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web1 172.16.0.11:80 check

backend company_b
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web2 172.16.0.12:80 check

backend company_c
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web3 172.16.0.13:80 check

Хм, это нетипичная просьба. Я думаю, вы могли бы сделать что-то подобное с команда "appsession" в HAProxy, но я не знаю точного алгоритма этого. Я предполагаю, что вам нужно будет спросить о списках HAProxy или посмотреть исходный код HAProxy.

Не могли бы вы выделить что-то «богаче», чем печенье? Например, создайте имена хостов «premium.company.com» и «standard.company.com» и направьте трафик на основе имени хоста.

Еще одна идея может заключаться в том, чтобы узнать, как форматируется собственный файл cookie HAProxy для закрепленных сеансов (см. Раздел «cookie» в документации). Если вы установите cookie с тем же именем и внутренними данными, что и HAProxy, я думаю, HAProxy будет маршрутизировать входящий запрос так, как вы хотите ...