Ich bin neu bei HAProxy und möchte Anfragen in Map-Dateien definierter Domänen umleiten. Ein kurzes Beispiel: In meiner Datei redirect.map:
abc.com xyz.com
def.ru idk.com
Wenn der Benutzer also eine Anfrage an die Domain abc.com oder def.ru sendet, wird er an die definierte Domain umgeleitet. Wenn er jedoch asd.com anfordert, sollte keine Umleitung erfolgen. Mein Ziel ist es, diese Umleitungen in einer Map-Datei zu definieren, damit sie leicht geändert werden können.
Als nächstes möchte ich dasselbe mit URI-Umschreibungen machen. So etwas wie:
http-request set-uri X if Y from rewrite.map
Meine Map-Datei sieht also folgendermaßen aus:
(my X variable) (my Y variable)
/abc/def/specific www.mydomain.com/specific
Habe ich mit HAProxy überhaupt die Möglichkeit dies zu tun?
Antwort1
http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }
Derhdr(x)
bringenliest den Anforderungsheader x
und gibt den gefundenen Wert zurück. (Technisch gesehen liest es das letzte Vorkommen dieses Headers, aber der Host
Header sollte nur einmal vorkommen.)
Dermap
Konverternimmt den vorhergehenden Wert (verbunden mit ,
), sucht ihn in der Map-Tabelle und gibt das Ergebnis zurück.
Wenn keine Übereinstimmung gefunden wird, wird kein Ergebnis zurückgegeben. Der -m found
Test gibt also kein Ergebnis zurück und die Regel stimmt nicht überein. ( -i
macht die Suche unabhängig von Groß- und Kleinschreibung.)
Wenn die Regel zutrifft, erstellen wir eine neue URL für den Location
Antwortheader, indem wir die Literalzeichenfolge https://
(ändern Sie diese http
bei Bedarf in ) + den umgeschriebenen Hostnamen aus der Map-Datei + die ursprüngliche Anforderungs-URI verwenden, die mit dem führenden beginnt /
und den Pfad und die Abfragezeichenfolge enthält, wobei die gesamte Anforderungs-URI erhalten bleibt.
Wenn Sie die ursprüngliche URI nicht beibehalten, sondern nur alles an die Hauptseite der Zielsite senden möchten, entfernen Sie es %[capture.req.uri]
aus dem Ausdruck.