Haproxy
帶有“標頭(主機)”檢查的 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()
etc匹配。是否在此連接上使用 HTTP?然後使用
mode http
. 如果不是(您實際上是在埠 80 上使用 MQTT 協議),那麼您無法匹配主機名,因為這不是通過連接進行通信的。您只能通過使用不同的 IP 地址和/或不同的埠號在一個系統上使用不同的 MQTT 代理。