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

Как настроить HAProxy для маршрутизации по порту без использования нескольких интерфейсов или слушателей

Я пытаюсь настроить Haproxy v1.5 для соединений Jabber, которые работают на нескольких портах на одном IP. Чтобы сохранить конфигурацию как можно проще, я хотел бы использовать один интерфейс и один или несколько бэкэндов. Есть ли способ передать исходный порт бэкэнду или использовать ACL для маршрутизации к другому бэкэнду в зависимости от порта?

frontend Jabber_IN
    bind 10.60.0.12:5222 name port5222
    bind 10.60.0.12:5223 name port5223
    bind 10.60.0.12:9090 name port9090
    bind 10.60.0.12:9091 name port9091
    bind 10.60.0.12:7070 name port7070
    bind 10.60.0.12:7443 name port7443
    bind 10.60.0.12:5229 name port5229 

    mode tcp
    option tcplog
    option tcpka

    timeout client 60m
    timeout server 60m
    timeout http-keep-alive 1m

    default_backend Jabber

backend Jabber
     tcp-check connect
     tcp-check send PING\r\n
     tcp-check expect string +PONG
    server Server1ZoneD 10.60.30.209:80  check
    server Server1ZoneE 10.60.47.4:80    check
    server Server2ZoneD 10.60.17.8:80    check
    server Server2ZoneE 10.60.45.219:80  check

Использование единого интерфейса и мультиплексирование на серверы действительно возможно. Вам потребуется добавить по одной бэкэнд-секции на каждый бэкэнд-сервер, например

backend JabberD1
    tcp-check connect
    tcp-check send PING\r\n
    tcp-check expect string +PONG
    server Server1ZoneD 10.60.30.209:80  check

backend JabberE1
    tcp-check connect
    tcp-check send PING\r\n
    tcp-check expect string +PONG
    server Server1ZoneE 10.60.47.4:80    check

и т.п.

В вашем интерфейсе разделите трафик следующим образом

    acl d1 dst_port 5222
    use_backend JabberD1 if d1

и т.п.