Você pode usar mapas para que funcione.
Isso está perfeitamente descrito em um post no blog HAProxy.com. Eles estão mapeando com base no cabeçalho Host
, mas seria trivial alterar a configuração para funcionar na URL.
Um benefício extra aqui é que você pode adicionar e remover dinamicamente entradas de mapeamento usando as palavras-chave http-[request|response] [set-map|del-map]
ou o soquete de administração.
As alterações feitas com http-[request|response]
ou através do soquete não são mantidas entre as reinicializações, então você gostaria de ter algum processo fora de banda para atualizar o arquivo de mapa ao mesmo tempo, mas isso é outra questão.
Supondo que você tenha um back-end para cada servidor e receba um arquivo de mapa chamado /etc/haproxy/items.map
com esses conteúdos:
#itemPath backendname
/item/a bk_server01
/item/b bk_server02
/item/c bk_server02
Você faria algo assim em seu front-end:
frontend ft_items
[...]
use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]
Se você tiver os dois servidores no mesmo back-end, escreverá uma ACL no front-end que capture todos os itens ( acl items path_beg /items
), envie-os para o back-end ( use_backend servers if items
) e substitua o use_backend
de linha do frontend com linhas use_server
apropriadamente clasificadas no backend.