HAProxy Reenvío de patrones de URL

HAProxy Reenvío de patrones de URL

Estoy usando HAProxy para equilibrar la carga de un par de servidores web (modo HTTP). Los servidores web son estrictamente dinámicos, es decir, no hay ningún contenido estático, sólo servicios web.
Las URL del tipo (análogas)

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

Ahora, cuando configuro HAProxy para reenviar las solicitudes entrantes a estas 3 URL en un par de máquinas, estoy especificando url_path usando acly path_end/ path_beg, pero al realizar la solicitud aparece Not Found on Acceleratorun error, lo que hace que sea más difícil identificar el problema.

A continuación se muestra la configuración que estoy usando. Además, no registra ningún error.

    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

¿Es posible enviar la solicitud desde HAProxy al servidor web con la ruta_url?

Si HAProxy lo recibe como http://192.168.5.2:80/small, envíe la solicitud al servidor web comohttp://192.168.5.10:8080/small

Respuesta1

Como su ruta está contenida al inicio de la URL, ¿por qué no usar path_beg? El uso recomendado para path_end es para extensiones de nombres de archivos.

        acl is_small ruta_comienzo -i /small
        acl is_medium ruta_comienzo -i /medio
        acl es_grande ruta_inicio -i /grande

Respuesta2

La ruta de una solicitud HTTP essiempreentregado al servidor backend, es decir

GET /small HTTP/1.1

será visible detrás de HAproxy solo como esa solicitud. Si sospecha que esto de alguna manera está truncado a

GET / HTTP/1.1

en el servidor detrás de HAproxy, debe verificar esto usando

tcpdump -i any port 8080 -As1024 | grep GET

en ese servidor y observe las GETsolicitudes entrantes.

Me estoy arriesgando y asumo que esperas que HAproxyinsertaralgo en frente del URI, como

    server web_1 192.168.5.14:8080/my/path check

convertiría una solicitud de /smallen una solicitud de /my/path/small. Esto se puede lograr usando la reqrepopción, consulte ladocumentaciónpara detalles.

información relacionada