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