我在 tcp 模式下使用 haproxy。我有一个监听多个端口的前端:
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 模式下对标头所做的那样,但我找不到。是否必须放弃我干净整洁的单一后端?
答案1
如果我是你的话我会使用 2 个后端。
如果您坚持,您可以使用use-server <server> if <condition>
选项并测试dst_port
。
类似于:use-server bla20001 if dst_port 201
或者类似于这样。
答案2
我认为没有好的办法可以做到这一点。我最终创建了更多的前端和后端。