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

HAProxy направляет соединения на правильный сервер

У меня есть два сервера за 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:.*