You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx中配置MQTT?附已尝试的配置代码

Nginx配置MQTT反向代理与集群负载均衡

嘿,看你已经在搭建Nginx代理MQTT集群的路上了,我帮你把现有配置理清楚,再补全关键的缺失部分,让整个配置真正跑起来!

首先,你创建的/usr/local/etc/nginx/mqtt.conf配置内容可以整理成清晰的代码块,方便后续维护:

log_format mqtt '$remote_addr [$time_local] $protocol $status $bytes_received ' '$bytes_sent $upstream_addr';

upstream hive_mq {
    server 127.0.0.1:18831; # node1
    server 127.0.0.1:18832; # node2
    server 127.0.0.1:18833; # node3
    zone tcp_mem 64k;
}

match mqtt_conn {
    # 发送带有客户端ID "nginx health check"的CONNECT包
    send \x10\x20\x00\x06\x4d\x51\x54\x54\x04\x02\x00\x3c\x00\x0f\x6e\x67\x69\x6e\x78\x20\x68\x65\x61\x6c\x74\x68\x20\x63\x68\x65\x63\x6b;
    expect ~* \x20\x02;
}

接下来,还有几个关键步骤必须完成,不然这个配置没法生效:

1. 在Nginx主配置中引入mqtt.conf

找到你的Nginx主配置文件(一般是/usr/local/etc/nginx/nginx.conf),注意要在http块外面添加stream模块配置——因为MQTT是TCP协议,不属于HTTP模块的范畴:

stream {
    include /usr/local/etc/nginx/mqtt.conf;

    server {
        listen 1883; # 对外提供MQTT服务的标准端口
        proxy_pass hive_mq;
        proxy_protocol on; # 如果你的后端MQTT服务器支持Proxy Protocol,开启它能让后端拿到客户端真实IP
        proxy_timeout 1d; # MQTT是长连接,得设个较长的超时时间,避免连接被无故断开
        proxy_connect_timeout 10s;

        # 启用健康检查,自动剔除挂掉的节点
        health_check match=mqtt_conn interval=5s falls=2 rises=2;
    }
}

2. 关键配置点解释

  • log_format mqtt:专门给MQTT流量定制的日志格式,能记录客户端IP、请求时间、协议状态、收发字节数以及后端节点地址,出问题的时候排查起来很方便。
  • upstream hive_mq:定义你的MQTT集群节点,zone tcp_mem 64k用来在Nginx的worker进程间共享节点状态,让负载均衡的效果更稳定。
  • match mqtt_conn:这是Nginx的TCP健康检查规则——发送一个符合MQTT协议规范的CONNECT包,期望收到后端返回的CONNACK成功响应(\x20\x02就是连接成功的标识),以此判断节点是否存活。
  • stream块:Nginx处理TCP/UDP流量的核心模块,必须放在http块外面配置,这里监听1883端口,把客户端的MQTT连接转发到集群节点,同时开启健康检查保证服务可用性。

3. 验证配置并重启Nginx

配置完别急着重启,先检查下配置有没有语法错误:

nginx -t

如果输出显示test is successful,就可以重启Nginx让配置生效了:

nginx -s reload

这样你的Nginx就可以完美充当MQTT的反向代理和负载均衡器,把客户端的连接均匀分发到后端的HiveMQ节点,还能自动跳过不健康的节点,保证服务的稳定性。

内容的提问来源于stack exchange,提问作者Rock Admin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:43:13