Bei Verwendung von HAProxy wird die Root-URL nur in der ACL abgeglichen

7

Mit HAProxy möchte ich das folgende Setup erstellen:

  • Alle Anfragen außer root (/), / articles und / blog gehen an server1
  • Alle Anfragen nach Root (/), / Artikeln und / Blogs gehen an Server2

Ich kann nicht herausfinden, wie root abgeglichen werden kann, ohne den Standardserver festzulegen, der dann negiert, dass alle Anforderungen an die Server1-Regel gehen.

Wie kann ich das oben genannte mit HAProxy ausdrücken?

Ein Regex mag die Lösung dafür sein, aber ich bin nicht besonders gut mit Regex, daher war es schwierig, eine darauf basierende Lösung zu finden.

michaelward82
quelle

Antworten:

7

Die Antwort darauf war natürlich erstaunlich einfach. Die ACL musste eine Regex-Übereinstimmung aufweisen^$|^/$|^/articles|^/blogs

Unten ist meine conf:

global
  pidfile  /var/run/haproxy.pid
  quiet
  daemon

defaults
  mode  http
  option  httplog
  option  dontlognull
  option http-server-close
  retries 1
  maxconn 1024
  contimeout  15000
  clitimeout  60050
  srvtimeout    1200000

frontend www
  bind :80

  acl is_for_server2 path_reg ^$|^/$|^/articles|^/blogs

  use_backend server2 if is_for_server2

  default_backend server1

backend server1
  option forwardfor
  server server1 10.0.8.1 maxconn 1500

backend server2
  option forwardfor
  server server2 10.0.8.2 maxconn 1500
michaelward82
quelle
Eine Anfrage für / blogstuff würde an Server2 gehen, während OP möglicherweise beabsichtigt hätte, dass eine solche Anfrage an Server1 gehen würde. Um dies zu beheben, könnte der Pfad_reg erweitert werden auf: ^ $ | ^ / $ | ^ / Artikel / | ^ / Artikel $ | ^ / Blogs / | ^ / Blogs $
acl is_for_server2 path_reg ^ $ | ^ / $ | ^ / web funktioniert bei mir nicht. Wenn / web, dann ist dieser reguläre Ausdruck wahr, andernfalls ist er falsch, selbst wenn die URL www.domain.com oder www.domain.com/ lautet
Allen King