Я пытаюсь применить HAProxy acl, чтобы выбрать серверную часть брокера mqtt, не работает. Я пробовал следовать конфигурациям HAProxy.
Окружающая среда:
Версия HAProxy: 1.8.19 MQTT Broker: EMQ X Broker версии 3.0
Пример конфигурации 1
listen mqtt
bind *:80
mode tcp
maxconn 50000
acl mqtt-request hdr_beg(host) -i mqtt.mydoamin.com
use_backend backend_mqtt if mqtt-request
backend backend_mqtt
mode tcp
server smg1 192.168.0.100:1883 check
Пример конфигурации 2
listen mqtt
bind *:80
mode tcp
maxconn 50000
acl mqtt_request req.payload(4,15) -m sub mqtt.mydoamin.com
tcp-request content accept if mqtt_request
use_backend backend_mqtt if mqtt_request
backend backend_mqtt
mode tcp
server smg1 192.168.0.100:1883 check
Пример конфигурации 3
listen mqtt
bind *:80
mode tcp
maxconn 50000
acl host_mqtt hdr(host) -i mqtt.mydoamin.com
use_backend backend_mqtt if host_mqtt
backend backend_mqtt
mode tcp
server smg1 192.168.0.100:1883 check
Пример конфигурации 4
listen mqtt
bind *:80
mode tcp
maxconn 50000
use_backend backend_mqtt if { hdr_end(host) -i mqtt.mydoamin.com }
backend backend_mqtt
mode tcp
server smg1 192.168.0.100:1883 check
Ни одна из вышеперечисленных конфигураций не соответствует хосту (mqtt.mydoamin.com).
Если вы используете mode tcp
в haproxy вы не можете сопоставить заголовки HTTP с hdr()
и т.п.
Говорится ли по этому соединению HTTP? Затем используйте mode http
. Если нет (вы фактически используете протокол MQTT на порту 80), вы не можете сопоставить имя хоста, так как оно не передается через соединение. Вы можете использовать разных брокеров MQTT только в одной системе, используя разные IP-адреса и / или разные номера портов.