
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 acl
und path_end
/ an path_beg
, aber beim Platzieren der Anfrage erhalte ich Not Found on Accelerator
eine 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 GET
Anfragen.
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 /small
in eine Anfrage für umwandeln. Dies kann durch die Verwendung der Option /my/path/small
erreicht werden , siehereqrep
Dokumentationfür Details.