HAProxy URL-Musterweiterleitung

HAProxy URL-Musterweiterleitung

Ich verwende HAProxy zum Lastenausgleich einiger Webserver (HTTP-Modus). Die Webserver sind streng dynamisch, d. h. es gibt keine statischen Inhalte, sondern nur Webdienste.
Die URLs des Typs (analog)

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

Wenn ich HAProxy jetzt so konfiguriere, dass die eingehenden Anfragen an diese 3 URLs auf einigen Maschinen weitergeleitet werden, gebe ich den URL-Pfad mit aclund path_end/ an path_beg, aber beim Platzieren der Anfrage erhalte ich Not Found on Acceleratoreine Fehlermeldung, was es schwieriger macht, das Problem genau zu bestimmen.

Unten sehen Sie die Konfiguration, die ich verwende. Außerdem werden keine Fehler protokolliert.

    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

Ist es möglich, die Anfrage von HAProxy mit dem URL-Pfad an den Webserver zu senden?

Wenn HAProxy es als empfängt http://192.168.5.2:80/small, dann senden Sie die Anfrage an den Webserver alshttp://192.168.5.10:8080/small

Antwort1

Da Ihr Pfad am Anfang der URL enthalten ist, können Sie path_beg verwenden. Die empfohlene Verwendung für path_end betrifft Dateinamenerweiterungen.

        acl is_small Pfad_Beg -i /small
        acl is_medium path_beg -i /medium
        acl ist_groß path_beg -i /groß

Antwort2

Der Pfad einer HTTP-Anfrage iststetsan den Backend-Server übergeben, d.h.

GET /small HTTP/1.1

wird hinter HAproxy als nur diese Anfrage sichtbar sein. Wenn Sie vermuten, dass dies irgendwie gekürzt wird auf

GET / HTTP/1.1

Auf dem Server hinter HAproxy sollten Sie dies überprüfen mit

tcpdump -i any port 8080 -As1024 | grep GET

auf diesem Server und beobachten Sie die eingehenden GETAnfragen.

Ich gehe mal davon aus, dass Sie von HAproxy erwarten,einfügenetwas vor der URI, wie

    server web_1 192.168.5.14:8080/my/path check

würde eine Anfrage für /smallin eine Anfrage für umwandeln. Dies kann durch die Verwendung der Option /my/path/smallerreicht werden , siehereqrepDokumentationfür Details.

verwandte Informationen