微信小程序MQTT客户端的坑

前方:
微信小程序界面之类的,若是功能不是很复杂的话,开发起来其实仍是挺简单的,可是比较坑的是他的安全机制。首先你须要有本身的域名,你的域名须要备案,备案的话通常要20天左右,并且你本身的服务器要支持https。因此,我要腾讯云买了域名,买了服务器,备案等等搞了20多天,钱却是花了很多,这还只是第一坑。html

小程序MQTT客户端:
小程序的MQTT客户端支持使用的是paho-mqtt.js,能够在github上面找到源码,怎么使用的话能够查看源码里面包含的例子,总的来讲并非很复杂。可是弄好以后,界面以下:linux

clipboard.png

用过MQTT的知道能够选择端口和服务器地址,还有用户名密码认证是可选的。因此我填好以后。链接错误以下:nginx

clipboard.png
按照提示说,个人域名没有在合法域名列表中,可是我肯定是已经配置好了的,并且小程序项目也已经刷新了,仍是会提示这个错误。git

解决方法:
由于小程序是使用wss进行通讯,默认使用的是443端口,不用本身指定端口,可使用下面图片中最下方的方式进行访问。github

clipboard.png
用过EMQ的应该知道,tcp端口为1883,ssl端口为8883,ws端口为8083,wss端口为8084,可是如今不能使用这些端口进行访问。以下所示:ubuntu

clipboard.png

EMQ服务器搭建:小程序

EMQ服务的搭建其实并不复杂,能够参照官方文档进行安装,我使用的是Linux的通用版本,这里要注意的是SSL证书的设置,个人一个问题有提到,有兴趣的能够看看。segmentfault

要解决上面的问题,这里使用Nginx进行反向代理。Nginx的安装也不是很复杂,可是使用源码安装的话,安装以前要安装好依赖库,能够参照: ubuntu16.04 nginx安装。另外,还要添加一个 more_clear_headers 模块,能够参照:openresty/headers-more-nginx-module微信小程序

接下来是Nginx的配置,主要配置SSL和反向代理,进行以下配置:安全

server {
    listen 443;
    server_name www.domain.com; #填写绑定证书的域名
    
    ssl on;
    ssl_certificate certs/1_www.domain.com_bundle.crt;
    ssl_certificate_key certs/2_www.domain.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
    ssl_prefer_server_ciphers on;

    location / {
        root   html; #站点目录
        index  index.html index.htm;
    }

    location = /mqtt {
        proxy_pass http://www.domain.com:8083;
        proxy_redirect off;
        proxy_set_header Host www.domain.com:8083;

        proxy_set_header Sec-WebSocket-Protocol mqtt;
        more_clear_headers Sec-WebSocket-Protocol;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
}

上面域名和证书之类的替换为你本身的域名和证书,注意证书的路径。另外,新测8084端口(wss)和8083端(ws)均可以,不过上面用8084端口时要用https。如今已经能够完成小程序MQTT客户端与EMQ服务器的通讯了。
感谢wxapp做者的交流指导。

参考:
https://github.com/tennessine...
http://emqtt.com/docs/v2/inst...
http://www.cnblogs.com/badboy...
http://www.cnblogs.com/badboy...
https://github.com/openresty/...
https://zhuanlan.zhihu.com/p/...

相关文章
相关标签/搜索