Я настраиваю haproxy для использования нескольких внутренних серверов, но хочу, чтобы один из них обрабатывал определенные запросы:
backend bagend
mode http
balance roundrobin
option httpchk GET / HTTP/1.1\r\nHost:\ www.example.com
use-server app1_00 if { path_beg /frodo }
use-server app1_01 if { path_beg /frodo }
use-server app1_02 if { path_beg /frodo }
use-server app1_03 if { path_beg /frodo }
server app1_00 10.0.0.1:9100 check
server app1_01 10.0.0.1:9101 check
server app1_02 10.0.0.1:9102 check
server app1_03 10.0.0.1:9103 check
server app2_00 10.0.0.2:9100 check
server app2_01 10.0.0.2:9101 check
server app2_02 10.0.0.2:9102 check
server app2_03 10.0.0.2:9103 check
Будут ли мои команды use-server сбалансированы по всем 4 бэкэндам в app1? Или мне нужно сделать это по-другому? Похоже, что все собирается app1_00
.
Что вы хотите сделать, так это иметь acl во внешнем интерфейсе, чтобы отправить запрос другому бэкэнд на основе URL-адреса.
frontend shire
bind *:80
mode http
acl path-frodo path_beg /frodo
use backend longbottom if path-frodo
default_backend bagend
backend longbottom
mode http
balance roundrobin
option httpchk GET / HTTP/1.1\r\nHost:\ www.example.com
server app1_00 10.0.0.1:9100 check
server app1_01 10.0.0.1:9101 check
server app1_02 10.0.0.1:9102 check
server app1_03 10.0.0.1:9103 check
backend bagend
mode http
balance roundrobin
option httpchk GET / HTTP/1.1\r\nHost:\ www.example.com
server app1_00 10.0.0.1:9100 check
server app1_01 10.0.0.1:9101 check
server app1_02 10.0.0.1:9102 check
server app1_03 10.0.0.1:9103 check
server app2_00 10.0.0.2:9100 check
server app2_01 10.0.0.2:9101 check
server app2_02 10.0.0.2:9102 check
server app2_03 10.0.0.2:9103 check
Все запросы, начинающиеся с / frodo, будут попадать только в app1_00, app1_01, app1_02 и app1_03. Все остальные запросы поразят все.