настроить прокси HA, чтобы разрешить некоторые запросы определенных серверов приложений

У меня есть установка с HaProxy, где каждый haproxy-сервер направляет трафик на несколько серверов приложений. Маршрутизация для обычного HTTP-трафика основана на хеш-коде URL-адреса запроса.

Теперь я хочу создать некоторые правила, позволяющие направлять определенные административные запросы на определенные серверы приложений. То есть у меня есть серверы приложений «node06 - node15». Я хотел бы иметь возможность запросить node06.mydomain.com/my-admin-request и перенаправить его на правильный сервер приложений.

Я не могу сделать это через DNS. Все запросы поступают через один открытый IP-адрес в кластер.

Итак, я создал конфигурацию haproxy, которая делает то, что я хочу:

frontend www-http
       bind :80
       reqadd X-Forwarded-Proto:\ http

       acl node06 hdr_beg(host) -i node06.
       use_backend node06-status if node06

       acl node07 hdr_beg(host) -i node07.
       use_backend node07-status if node07

       # ... and many more such nodes ...

       default_backend application-backend


       # This is the application back end. 
       # Route request based on hash of url
backend application-backend
       balance url_param url check_post

       server node06 192.168.1.70:80 check
       server node07 192.168.1.71:80 check

       # ... and many more such nodes ...

       # these are the status back ends. This is so we can make requests
       # direct to each node for the status console.
backend node06-status
       server node06 192.168.1.70:80

backend node07-status
       server node07 192.168.1.71:80

       # ... and many more such back ends ...

Это будет работать (я думаю), но это действительно многословно. Мне нужно трижды создать идентичные блоки конфигураций для каждого сервера приложений в кластере. Это станет неуправляемым, если я расширю это за пределы 10 узлов.

Есть ли способ настроить это так, чтобы мне не приходилось разделять строки конфигурации для каждого сервера приложений?

1
задан 3 January 2017 в 07:11
1 ответ

Вы можете поместить ACL и use-server (а не use-backend) в определение бэкэнда. Также, я думаю, что вы можете использовать встроенные ACL и не обязательно определять их перед использованием.

.
3
ответ дан 3 December 2019 в 18:31

Теги

Похожие вопросы