Назад | Перейти на главную страницу

haproxy acl с проверкой «заголовок (хост)» не работает для серверной части mqtt

Я пытаюсь применить 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-адреса и / или разные номера портов.