Gibt es eine Möglichkeit, HAProxy so zu konfigurieren, dass Datenverkehr basierend auf einem Cookie gesendet wird?

8

Bei der Konfiguration von HAProxy möchte ich Datenverkehr basierend auf dem Vorhandensein eines Cookies an bestimmte Server senden.

Zum Beispiel:

  1. Es gibt einen HAProxy-Server und 2 Webserver (ServerA und ServerB).
  2. Wenn sich jemand anmeldet, wird ein Cookie "loginCreds = user: company" erstellt.
  3. Wenn John von CompanyA hereinkommt, lautet sein Cookie "loginCreds = John: CompanyA".
  4. Sein Datenverkehr wird dann an serverA weitergeleitet.

Ist das möglich und wenn ja, wie richten Sie es ein?

slm
quelle

Antworten:

11

Ja, es ist möglich, aber Sie müssen diese Konfiguration selbst optimieren / testen. Es sollte ungefähr so ​​aussehen:

Hinweis : Hiermit wird nur geprüft, ob der Header "Cookie:" auf "CompanyA" oder "CompanyB" gesetzt ist, wobei zwischen Groß- und Kleinschreibung unterschieden wird. Sie können mit Werten herumspielen und wenn Sie mit regulären Ausdrücken gut umgehen können, können Sie stattdessen hdr_reg (Cookie) verwenden.

frontend read_cookies
    bind    :80
    mode    http

    acl is_companya hdr(Cookie) CompanyA
    acl is_companyb hdr(Cookie) CompanyB

    use_backend company_a if is_companya
    use_backend company_b if is_companyb

    default_backend company_c

backend company_a
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web1 172.16.0.11:80 check

backend company_b
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web2 172.16.0.12:80 check

backend company_c
        mode    http
        option  forwardfor
        balance source
        option  httpclose
        option  httpchk
        server  web3 172.16.0.13:80 check
user25244
quelle
+1 Aus irgendeinem Grund hatte ich Cookies als etwas Magisches und Besonderes angesehen, aber offensichtlich sind sie nur Überschriften, damit Sie sie hdr () können! Prost!
Coops
1

Hmn, das ist eine atypische Anfrage. Ich denke, Sie könnten so etwas mit dem Befehl "appsession" in HAProxy tun, aber ich kenne den genauen Algorithmus nicht. Ich vermute, Sie müssten in den HAProxy-Listen nachfragen oder sich den HAProxy-Quellcode ansehen.

Könnten Sie nicht diskriminieren, was "reicher" ist als ein Cookie? Erstellen Sie beispielsweise die Hostnamen "premium.company.com" und "standard.company.com" und leiten Sie den Datenverkehr basierend auf dem Hostnamen weiter.

Eine andere Idee könnte sein, zu erfahren, wie HAProxys eigenes Cookie für Sticky-Sitzungen formatiert wird (siehe Abschnitt "Cookie" in den Dokumenten). Wenn Sie ein Cookie mit genau dem Namen und den internen Daten setzen, die HAProxy selbst verwendet, leitet HAProxy die eingehende Anfrage vermutlich so weiter, wie Sie es möchten ...

Jesper M.
quelle