У меня есть два сервера за pfsense haproxy, и мне нужно убедиться, что пользователи попадают на один и тот же сервер на основе части URL-адреса.
http://mydomain/<location>/..../....
В моем случае это всегда первая косая черта после домена, поэтому все пользователи с таким же именем должны оказаться на одном сервере.
Какие-либо предложения?
Нет собственного способа сделать это, но немного повозившись, можно заставить его работать.
Вам нужно будет извлечь компонент URL-пути, который вы хотите, во Frontend, и поместить его в одноразовый заголовок, который затем будет использоваться вашим Backend для выбора сервера.
Ваш интерфейс будет выглядеть примерно так:
frontend fe_pfsense
...
http-request set-header X-Location-Path %[capture.req.uri]
http-request replace-header X-Location-Path ([^/]+)/.* \1
use_backend be_pfsense
...
Сначала мы извлекаем URI и помещаем его в одноразовый заголовок под названием X-Location-Path
.
Затем мы используем регулярное выражение для поиска и захвата первого компонента пути и перезаписываем его в тот же заголовок.
И ваш бэкэнд будет выглядеть примерно так:
backend be_pfsense
...
balance hdr(X-Location-Path)
...
Мы используем hdr()
баланс алгоритм балансировки на основе пути, который мы извлекли во Frontend.
При желании, я думаю, вы могли бы затем отбросить заголовок до того, как он отправится на серверы, с помощью любой из следующих строк, но вы захотите проверить это, чтобы убедиться, что порядок событий работает должным образом.
http-request del-header X-Location-Path
reqidel ^X-Location-Path:.*