У меня есть файл конфигурации HAProxy, который создается программно, и я получаю следующую ошибку для каждого определенного бэкэнда:
[WARNING] 073/153725 (1663) : parsing [/etc/haproxy/haproxy.cfg:964] : 'use_backend' ignored because backend 'bk_10716' has no frontend capability.
Мой файл конфигурации довольно прост, и упрощенная версия с одним сервером, похоже, работает, поэтому я не могу понять, что не так.
Мой файл конфигурации состоит из этого:
global
tune.ssl.default-dh-param 2048
log 127.0.0.1 local1 debug
chroot /var/lib/haproxy
user haproxy
group haproxy
maxconn 4000
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen stats
bind *:1234
stats auth admin:bdi2016
stats uri /
stats realm Haproxy\ Statistics
stats enable
mode http
frontend http:
bind *:80
mode http
option httpclose
option forwardfor
за которыми следует множество из них:
use_backend bk_10011 if { hdr_end(host) -i somedomainname.com }
backend bk_10011
server server_10011 127.0.0.1:10011 check
Я просто упускаю что-то очевидное / глупое?
Это был просто тупая ошибка. Мне нужно было указать все мои use_backend if
операторы внутри интерфейса, а не над каждым отдельным сервером. Вот почему он работал только с одним сервером, потому что независимо от отступа первый use_backend
"принадлежал frontend http:
и каждый последующий бэкэнд оказывался осиротевшим.
Вам необходимо присвоить интерфейсу ID номер (например, ID 1). Затем вам нужно назначить указанный идентификатор для соответствующих конфигураций бэкэнда.
Так что на интерфейсе это будет примерно так:
frontend http:
id 1
bind *:80
mode http
option httpclose
option forwardfor
и вот так на бэкэнде (ах):
use_backend bk_10011 if { hdr_end(host) -i somedomainname.com }
backend bk_10011
server server_10011 127.0.0.1:10011 id 1 check
По крайней мере, у меня это сработало.