emqx配置https并使用nginx反向代理

  1. 下载域名证书,找到.crt或.key,编辑器打开,复制秘钥文本,找在线转pem工具,生成.pem文件。

    ssl证书从DNSpod下载 https://console.cloud.tencent.com/cns/detail/dengemo.com/records/0

    在线转pem:https://www.myssl.cn/tools/merge-pem-cert.html

    选择PEM文件包括证书(CRT/CER)

    下载的证书如图:

    腾讯云已经有pem,crt,key,因此可以不用转pem

    image-20220208003754624

    如果下载的证书没有pem,使用在线工具进行转换

621605869569_.pic_hd

  1. 在emq中启动ssl

    whereis emqx 可查看安装路径

641605869642_.pic_hd

修改emqx.conf如下部分

1
2
3
listener.wss.external = 8084
listener.wss.external.keyfile = /root/cert/key.pem
listener.wss.external.certfile = /root/cert/dengemo.com_bundle.pem

重启emqx

1
2
emqx stop
emqx start
  1. 配置nginx的反向代理

    配置文档:https://docs.emqx.net SDK & Tools -> MQTT微信小程序接入

661605869702_.pic_hd

编辑/etc/nginx/nginx.conf

添加一个server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#https
server {
listen 443 ssl;
server_name dengemo.com;
ssl_certificate "/root/cert/dengemo.com_bundle.crt";
ssl_certificate_key "/root/cert/dengemo.com.key";
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

# 添加反向代理
location /mqtt {
proxy_pass http://127.0.0.1:8083/mqtt;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# client_max_body_size 35m;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

对配置文件进行校验

保存配置文件之后执行:

1
nginx -t

susccessful即可

image-20201209112907309

重启nginx服务

1
service nginx start

重新加载配置文件

1
nginx -s reload
  • 用ngix反向代理后,wss连接端口就成了443,不是8084。

681605869823_.pic_hd

691605869841_.pic_hd

  1. 配置文件

711605869889_.pic_hd

721605869914_.pic_hd

751605870352_.pic_hd

  • 查看安装路径

761605870415_.pic_hd

但不知道什么原因,不使用nginx做反向代理的话,用wss 8084 是无法连接的。