Não sei muito sobre haproxy , mas sei o suficiente sobre nginx para responder às suas preocupações com problemas de desempenho.
Observe que a configuração nginx é compilada em um formato amigável struct e mantida na memória, o arquivo não é lido em cada solicitação. Portanto, centenas de configurações location /... devem ser executadas quase tão rapidamente quanto chamar strlen() + strncmp() o mesmo número de vezes. Qual é insignificante em comparação com a configuração do soquete.
O URL é normalizado antes do início da correspondência , portanto, não há nada realmente inteligente sobre os jogos a menos que você use um dos operadores ( = , ~ , *~ , ^~ ).
Você pode usar uma correspondência de expressão regular ( ~ , *~ ) e, em seguida, uma lógica if para decidir entre os upstream servidores, mas que seria a solução lenta .
Por outro lado, se você tiver pelo menos um local regex, considere o uso do operador ^~ . Veja a resposta antiga, mas ainda relevante, de Martin Redmond sobre SO sobre diferentes operadores e como nginx corresponde a eles.