У меня установлен 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
При такой конфигурации внутреннее соединение будет выполнено к тому же порту, к которому подключился клиент. Отдельное ключевое слово порта в строке сервера используется для проверки работоспособности.