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

HAproxy перенаправляет все HTTP-запросы с одного интерфейса на один сервер (несколько портов)

У меня установлен haproxy, и он работает нормально, в настоящее время у меня есть конфигурация, которая выглядит следующим образом

frontend public_http
        # Listen on port 80
        bind *:80
        mode http
        # Define ACLs for each domain
        acl acl_webtest  hdr(host) -i -f /etc/haproxy/acls/webtest
        use_backend back_web_test if acl_webtest

backend back_web_test
        mode http
        balance roundrobin  # Load Balancing algorithm
        option httpchk
        option forwardfor
        server webtest 192.168.0.123:80 weight 1 maxconn 512 check

Как видите, я перенаправляю входящий HTTP-трафик на бэкэнд через тот же порт (80 по умолчанию для HTTP).

Но мой вопрос:
Возможно ли иметь один фронтенд без кучи bind *:<port> операторы и перенаправить на один бэкэнд на тот же <port>. НО только HTTP-трафик. Я знаю, что порт по умолчанию для HTTP - 80, но мы можем отправить HTTP-запрос на любой порт.

Это похоже на прокси TCP, но мне нужно перенаправить на серверную часть на основе домена, а уровень TCP (OSI 4) ничего не знает о домене.

Надеюсь, я четко описал свою проблему.

Буду признателен за любую помощь.

Вы можете сделать это, опуская : порт на сервер линия

frontend public_http
    # Listen on port 80 to 1024, included
    bind :80-1024
    # Listen on ports 8088, 8080, 8000
    bind :8088,:8080,:8000
    mode http
    # Define ACLs for each domain
    acl acl_webtest  hdr(host) -i -f /etc/haproxy/acls/webtest
    use_backend back_web_test if acl_webtest

backend back_web_test
    mode http
    balance roundrobin  # Load Balancing algorithm
    option httpchk
    option forwardfor
    server webtest 192.168.0.123 weight 1 port 80 maxconn 512 check

При такой конфигурации внутреннее соединение будет выполнено к тому же порту, к которому подключился клиент. Отдельное ключевое слово порта в строке сервера используется для проверки работоспособности.