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

haproxy переназначить TCP-порт с одним сервером

Я использую haproxy в режиме tcp. У меня один интерфейс, который прослушивает несколько портов:

frontend front
   mode tcp
   bind *:20000
   bind *:20001
   ...
   default_backend back

И единственный бэкэнд, который пересылает эти запросы без изменения портов:

backend back
   server myserver server.host.com check port 20000
   server anotherServer another.host.com check port 20000
   server mybackup backup.host backup.host.com check port 20000 backup
   # some other useful backend logic, like logging
   # which I don't want to repeat a bunch of times

Поскольку мы поддерживаем некоторые устаревшие API, нам необходимо принять некоторые старые порты более низкого уровня и переназначить их. Например, я хочу принять порт 200 и переназначить его на 20000, 201 к 20001, и т.д.

Я надеялся, что директива внешнего интерфейса изменит порт, как вы могли бы сделать для заголовка в режиме http, но я не могу его найти. Придется ли отказаться от моего красивого чистого одиночного бэкенда?

На вашем месте я бы использовал 2 бэкенда.

Если вы настаиваете, вы можете использовать use-server <server> if <condition> вариант и тест dst_port.

Что-то вроде: use-server bla20001 if dst_port 201 или что-то вроде этого.

Я считаю, что нет хорошего способа сделать это. В итоге я создал больше интерфейсов и бэкэндов.