微信小程序接入emq
环境
- emq v2.3.0
- lnmp
- 微信开发工具
- ubutun 16.04
1. 下载demo
微信小程序 MQTT 接入Demo下载地址
下载完成后,打开工程,修改index.js文件,主要修改host
小程序要求请求要是https的,但是我们这里使用的是nginx反向代理,将443端口的请求代理至8083端口,所以我认为这个port可以不写。
const host = 'wxs://已经备案过的域名/mqtt';
注意: 虽然/mqtt不是必须固定的,这取决与在nginx中如何配置,但是为了规范化,我们最好这么来写
2. 添加证书,修改emq配置文件
进入 emq的etc目录,找到emq.conf文件,找到如下配置:
# ssl证书的秘钥
listener.ssl.external.keyfile = etc/certs/key.pem
# ssl证书的cert
listener.ssl.external.certfile = etc/certs/cert.pem
# CA证书
listener.ssl.external.cacertfile = etc/certs/cert.pem
需要注意的是: 第三项配置默认是注释掉的,需要打开注释,然后将各文件路径匹配对,这里我将自己证书文件修改了名字,放在了 /emqttd/etc/certs/下
同样的在emq.conf中还有关于websocket的配置:
listener.wss.external.keyfile = etc/certs/key.pem
listener.wss.external.certfile = etc/certs/cert.pem
这里我并没有将第三行的注释打开,也可以运行,具体原因未知。
3. 修改nginx配置文件,增加反向代理
进入/usr/local/nginx/conf目录,打开nginx.conf, 增加server段
server
{
# 服务器域名,必须是域名,不能是 ip
server_name 自己的域名;
# error page 可以自己设置
error_page 404 www.baidu.com;
# 监听 443端口
listen 443 ssl;
# 开启ssl
ssl on;
# 建议将 证书 拷贝一份至 /usr/local/nginx/conf/ssl 下
ssl_certificate /usr/local/nginx/conf/ssl/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/ssl/kltaiot2021.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;
# 增加 请求 举例: 如果访问 https://server_name/mqtt
# nginx会将上面的访问转至 proxy_pass 即实际访问的是http://localhost:8083
location /mqtt {
proxy_pass http://localhost:8083;
proxy_redirect off;
proxy_set_header Host localhost:8083;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
通过以上步骤,就可以将443端口来的https请求转接至8083http请求,再来一遍那张图: