Ich versuche, ein Haproxy einzurichten, um Balance-Anforderungen auf ein paar Backends zu laden, die durch den uri-Pfad identifiziert werden. Zum Beispiel:Haproxy-Route und neu schreiben basierend auf URI-Pfad
Sollte der "Katalog-v1" Backends führen.
Thing ist jede App reagiert auf einen anderen Pfad, so muss ich nicht nur die App identifizieren, sondern schreiben Sie den URL-Pfad. Z.B.
- https://www.example.com/v1/catalog/product
- https://www.example.com/v2-2/checkout/cart/123
- https://www.example.com/v3.1.2/checkout/cart
TO
- https://www.example.com/catalog-v1/product
- https://www.example.com/checkout-v2-2/cart/123
- https://www.example.com/checkout-v3.1.2/cart
Ich weiß, dass ich nicht HAProxy zum Umschreiben Zweck verwenden soll aber jetzt ist dies unvermeidlich.
Versucht, die folgende Regex, die auf regex101 gearbeitet:
([a-z.]*)\/([a-z0-9\-\.]*)\/([a-z\-]*)\/(.*)
Substitution:
\1/\3-\2/\4
Und schließlich ist hier die haproxy.config:
global
daemon
user root
group root
maxconn 256000
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
stats socket /run/haproxy/stats.sock mode 777 level admin
defaults
log global
option dontlognull
maxconn 4000
retries 3
timeout connect 5s
timeout client 1m
timeout server 1m
option redispatch
balance roundrobin
listen stats :8088
mode http
stats enable
stats uri /haproxy
stats refresh 5s
backend catalog-v1
mode http
option httpchk GET /catalog-v1/ping
http-check expect status 200
reqrep ([a-z.]*)\/([a-z0-9\-\.]*)\/([a-z\-]*)\/(.*) \1/\3-\2/\4
server 127.0.0.1:8280_catalog-v1-node01 127.0.0.1:8280 check inter 2s rise 3 fall 2
backend checkout-v1
mode http
option httpchk GET /checkout-v1/ping
http-check expect status 200
reqrep ([a-z.]*)\/([a-z0-9\-\.]*)\/([a-z\-]*)\/(.*) \1/\3-\2/\4
server 127.0.0.1:8180_checkout-v1-node01 127.0.0.1:8180 check inter 2s rise 3 fall 2
frontend shared-frontend
mode http
bind localhost:80
acl is-catalog-v1-path path_dir /v1/catalog
acl is-checkout-v1-path path_dir /v1/checkout
use_backend catalog-v1 if is-catalog-v1-path
use_backend checkout-v1 if is-checkout-v1-path
Bin ich etwas fehlt?
Ich habe damit seit einiger Zeit ohne Erfolg gekämpft. Die Backends zeigen "UP" auf der Haproxy-Statistik-Seite, aber jedes Mal, wenn ich die "nicht umgeschriebene URL" anrufe, erhalte ich einen 400 Bad Request-Fehler.
Vielen Dank im Voraus für Ihre Hilfe!
Arbeitete perfekt! Ich glaube, ich habe etwas vermisst. Vielen Dank! – leovrf
Ich habe mit einem ähnlichen gekämpft. Im Grunde möchte ich die URL example.com/test/app/v1/foo/bar-> otherexample.com/v1/app/foo/bar umleiten. Ich habe versucht, die Regex 'reqrep^([^ \] *) \/([a-zA-Z] \ *)/([a-zA-Z] \ *)/([0-9A- Za-z] \ *)/(. *) \ 1 \/\ 4/\ 3/\ 5' mit der Serverkonfiguration als 'Servername otherexample.com check maxqueue 200 weight 100' – user320550