使用nginx代理mqtt服务
先说概念避免踩坑: mqtt协议分 TCP 和webSocket
其中TCP通过nginx透传要用nginx的stream模块, 而webSocket用到的是http模块;
首先看nginx有木有stream模块;
nginx -V 2>&1 | grep -- '--with-stream'
有输出则标是有stream模块
然后在
nginx.conf中
添加
http {// stream 模块和http 同一级
}
stream {include conf.d/*.stream;
}
然后再 conf.d/mqtt.stream 中添加
upstream mqtt_server { server 10.10.10.10:1883; #可配多个高可用
} server {listen 1883; ssl_certificate /usr/local/openresty/nginx/conf/ssl/_.xxxxxxx_chain.crt;ssl_certificate_key /usr/local/openresty/nginx/conf/ssl/_.xxxxx_key.key;proxy_pass mqtt_server;proxy_connect_timeout 150s;proxy_timeout 150s;proxy_buffer_size 3M;tcp_nodelay on;
}
注意stream 模块不支持 server_name , 监听的只有端口,域名可以瞎配;
stream模块如果配置了http模块的一些东西, 数据解析就会出问题; 所以我啥也没加; 优化的 就需要去查查配置那些东西了
注意事项还有: 防火墙, 域名端口