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

Как я могу заставить бэкэнды HAProxy включать путь

При использовании HAProxy для виртуального хостинга я вижу, как использовать Host из заголовка во внешнем интерфейсе, чтобы решить, к какому бэкэнду маршрутизировать. Однако можно ли сделать серверной частью URL-адрес, который включает путь (мало чем отличается от того, что вы сделали бы с apache или nginx при настройке виртуального хостинга).

http://www.techrawr.com/tag/haproxy/ - показывает большую его часть. Но что, если бы серверные части находились на одном сервере, но с backend1 и backend2 в качестве серверов?

Я думаю, вы ищете что-то подобное, чтобы сбалансировать разные серверы на основе URL-адреса:

frontend http-farm
    bind 0.0.0.0:80
    acl app1web     hdr_beg(host) -i app1  # for http://app1.domain.com
    acl app2web     hdr_beg(host) -i app2  # for http://app2.domain.com

acl msg-url-1 url_reg ^\/path/games/.*
acl msg-url-2 url_reg ^\/path/photos/.*
acl msg-url-3 url_reg ^\/path/mail/.*
acl msg-url-4 url_reg ^\/path/wazap/.*

use_backend games  if  msg-url-1 app1web
use_backend photos if  msg-url-2 app2web
use_backend mail if .....



backend games
    option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app1.domain.com
    option  forwardfor
    balance roundrobin
    server  appsrv-1  192.168.1.10:80  check inter 2000 fall 3
    server  appsrv-2  192.168.1.11:80  check inter 2000 fall 3

backend photos
    option httpchk GET /alive.php HTTP/1.1\r\nHost:\ app2.domain.com
    option  forwardfor
    balance roundrobin
    server  appsrv-1  192.168.1.13:80  check inter 2000 fall 3
    server  appsrv-2  192.168.1.14:80  check inter 2000 fall 3

Источник: Haproxy ACL для баланса по запросу URL

Директива «сервер» в HAProxy поддерживает ряд параметров, и одна из них - параметр «redir». Вы можете использовать его для отправки перенаправления HTTP 302 обратно клиенту - и чтобы клиент разговаривал с серверной частью (хотя это не будет прокси):

Пример:

backend www_example_com

balance roundrobin

server Backend1 10.0.0.1:80 redir http:// www.example.com/backend1

server Backend2 10.0.0.1:80 redir http:// www.example.com/backend2

Если только прокси-сервер HA имеет общедоступный порт, то перенаправление на бэкэнд не было бы хорошим решением. Для этого вам может потребоваться, чтобы прокси-сервер ha выполнял работу, как и предполагалось, хотя я не уверен, что это хорошая практика для изменения путь в зависимости от результата балансировки нагрузки.

Я опубликовал свое решение для stackoverflow по аналогичному вопросу, ознакомьтесь с ним для получения дополнительной информации Подробный ответ