При настройке HAProxy я хотел бы отправлять трафик на определенные серверы в зависимости от наличия файла cookie.
Например:
Возможно ли это, и если да, то как это настроить?
Да, это возможно, но вам нужно будет настроить / протестировать эту конфигурацию самостоятельно. Это должно выглядеть примерно так:
Заметка: Это только проверяет, установлен ли заголовок «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 будет маршрутизировать входящий запрос так, как вы хотите ...