Я пытаюсь настроить haproxy для маршрутизации к бэкэндам в зависимости от поддомена, который использовался в HTTP-запросе. Например, у меня есть обычный веб-сервер, работающий на порту 8000, и сервер приложений, ожидающий подключения к веб-сокету, работающего на порту 8001 на том же IP-адресе. Теперь я хочу, чтобы, если пользователь нажимает app.mydomain.com:80, он перенаправляется на порт 8001, а если он попадает на www.mydomain.com (или любой другой поддомен), он перенаправляется на веб-сервер на порт 8000.
Я придумал простую конфигурацию, которая, как мне кажется, должна этого достичь (она слабо основана на этот вопрос):
frontend all 0.0.0.0:80
timeout client 86400000
acl aclMS1 hdr_dom(host) -i app
use_backend beMS1 if aclMS1
default_backend beWEB
backend beMS1
timeout server 86400000
server srvMS1 localhost:8001 maxconn 200 check
backend beWEB
server webserver localhost:8000 maxconn 200 check
Однако, похоже, это не работает. Я всегда попадаю на свой веб-сервер на порт 8000. Что я делаю не так?
Я понял, как заставить его работать. Мне не хватало опции режима http. Моя конфигурация теперь выглядит так и работает как шарм:
defaults
mode http
timeout server 50000ms
timeout server 50000ms
timeout server 50000ms
frontend all 0.0.0.0:80
timeout client 86400000
acl aclMS1 hdr_dom(host) -i app
use_backend beMS1 if aclMS1
default_backend beWEB
backend beMS1
timeout server 86400000
server srvMS1 localhost:8001 maxconn 200 check
backend beWEB
server webserver localhost:8000 maxconn 200 check