Encaminhamento de padrão de URL HAProxy

Encaminhamento de padrão de URL HAProxy

Estou usando o HAProxy para balancear a carga de alguns servidores web (modo HTTP). Os servidores web são estritamente dinâmicos, ou seja, não existe nenhum conteúdo estático, apenas serviços web.
Os URLs do tipo (análogo)

http://192.168.5.10:8080/small
http://192.168.5.10:8080/medium
http://192.168.5.10:8080/large

Agora, quando configuro o HAProxy para encaminhar as solicitações recebidas para esses 3 URLs em algumas máquinas, estou especificando o url_path usando acle path_end/ path_beg, mas ao fazer a solicitação recebo Not Found on Acceleratorum erro, o que torna mais difícil identificar o problema.

Abaixo está a configuração que estou usando. Além disso, não está registrando nenhum erro.

    global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      10000
        srvtimeout      10000

frontend http_proxy
        bind 192.168.5.9:8888
        acl is_small path_end -i small
        acl is_medium path_end -i medium
        acl is_large path_end -i large

        use_backend web_server_small if is_small
        use_backend web_server_medium if is_medium
        use_backend web_server_large if is_large

backend web_server_small
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.10:8080 check
        server  web_2 192.168.5.11:8080 check

backend web_server_medium
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.12:8080 check
        server  web_2 192.168.5.13:8080 check

backend web_server_large
        mode http
        balance roundrobin
        option httpclose
        server  web_1 192.168.5.14:8080 check
        server  web_2 192.168.5.15:8080 check

É possível enviar a solicitação do HAProxy para o web_server com o url_path?

Se o HAProxy receber como http://192.168.5.2:80/small, envie a solicitação para o servidor da web comohttp://192.168.5.10:8080/small

Responder1

Como o seu caminho está contido no início do URL, por que não usar path_beg, o uso recomendado para path_end é para extensões de nome de arquivo.

        acl is_small caminho_beg -i /small
        acl is_medium caminho_beg -i /medium
        acl is_large caminho_beg -i /large

Responder2

O caminho de uma solicitação HTTP ésempreentregue ao servidor back-end, ou seja

GET /small HTTP/1.1

ficará visível atrás do HAproxy apenas como essa solicitação. Se você suspeitar que isso de alguma forma está truncado para

GET / HTTP/1.1

no servidor por trás do HAproxy, você deve verificar isso usando

tcpdump -i any port 8080 -As1024 | grep GET

nesse servidor e observe as GETsolicitações de entrada.

Estou me arriscando e presumo que você espera que o HAproxyinseriralgo na frente do URI, como

    server web_1 192.168.5.14:8080/my/path check

transformaria uma solicitação /smallem uma solicitação para /my/path/small. Isto pode ser conseguido usando a reqrepopção, consulte odocumentaçãopara detalhes.

informação relacionada