In meinen Beitrag Loadbalancer und Webserver härten habe ich map Files in HAProxy verwendet, um
die Konfiguration zu vereinfachen. Normalerweise arbeitet HAProxy weiter, wenn ein use_backend
keine
Anwendung findet, da man dazu in der Regel eine entsprechende ACL definiert. Wenn man mehrere map Files
verwendet und diese sollen nacheinander ausgewertet werden, z.B. zuerst möchte man nach Pfaden routen
und dann nach Hostnamen, dann muss man auch ACLs definieren. Falls man keine ACL und kein
Default-Backend bei der map-Funktion angibt, wird auch Default-Backend ignoriert, welches
mit default_backend
konfiguriert wird.
Minimalbeispiel
global
log /dev/log local0
log /dev/log local1 notice
defaults
mode http
timeout connect 5s
timeout client 15s
timeout server 15s
frontend http-in
bind :8080
use_backend bk_%[path,map_beg(/etc/haproxy/path2backends.map)] if { path,map_beg(/etc/haproxy/path2backends.map) -m found }
use_backend bk_%[req.hdr(host),lower,map(/etc/haproxy/host2backends.map,stats)]
backend bk_stats
stats enable
stats show-legends
stats realm Haproxy\ Statistics
stats uri /
stats refresh 30s
backend bk_host1
server a1 127.0.0.1:9001
backend bk_host2
server a2 127.0.0.1:9002
backend bk_path1
server a3 127.0.0.1:9003
backend bk_path2
server a4 127.0.0.1:9004
Die ACL { path,map_beg(/etc/haproxy/path2backends.map) -m found }
ist wahr, wenn der Pfad in der Datei
path2backends.map
gefunden wurde. Falls das nicht Fall ist, wird diese Zeile übersprungen.
Wird der Hostname von Request nicht in der Datei host2backends.map
gefunden, dann wird das Backend
bk_stats
genommen.