Eu usaria 2 backends se eu fosse você.
Se você insistir, poderá usar a opção use-server <server> if <condition> e testar dst_port .
Algo como: use-server bla20001 if dst_port 201 ou algo assim.
Estou usando o haproxy no modo tcp. Eu tenho um frontend único que ouve várias portas:
frontend front
mode tcp
bind *:20000
bind *:20001
...
default_backend back
E um único back-end que encaminha essas solicitações sem alterar as portas:
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
Como estamos apoiando algumas APIs herdadas, precisamos aceitar algumas portas antigas de nível inferior e remapá-las. Por exemplo, eu quero aceitar a porta 200 e remapá-la para 20000 , 201 para 20001 , etc.
Eu estava esperando por uma diretiva frontend para alterar a porta como você faria para um cabeçalho no modo http, mas não consigo encontrar um. Terá que abandonar meu backend simples e limpo?
Eu usaria 2 backends se eu fosse você.
Se você insistir, poderá usar a opção use-server <server> if <condition> e testar dst_port .
Algo como: use-server bla20001 if dst_port 201 ou algo assim.
Eu acredito que não há uma boa maneira de fazer isso. Acabei criando mais frontends e backends.
Tags haproxy