MixIO物连网平台搭建

MixIO物连网平台搭建

回到前面,自己好奇搭了开源的物连网平台,用nginx作为应用网关,代理了MixIO的服务,用自己的域名访问,已经能够正常访问自己创建的项目。

不过,有几点,全站https加密没弄,于是自己申请了证书,虽然站点能加密了,不过在mqtt.js调用连接的时候,是直接拼接域名加端口号,直接访问了后端的服务而没有经过nginx,wss协议验证证书的时候,会直接调用MixIO平台签发的证书,这个证书是没办法通过浏览器的证书信任,MixIO内置的证书也没法匹配域名。所以虽然监听了443并配置了域名证书,不过在连接wss协议后一直是拒绝连接的,这下好了,登录平台,连自己创建的项目也不能连接,开发板上配置的mqtt连接,也没办法通过域名连接,只能改为连接服务器IP。本来以为,就http协议,不用加密,用用就算了,后面发现,MixIO的APP,配置私有服务,请求http服务是报错了,物连网平台的想实现人脸识别,调用WebRTC API用于访问和控制用户摄像头和麦克风等媒体输入设备,出于安全考虑,是要求在HTTPS环境下才能使用,站点没有https,添加摄像头时,直接报错。

navigator.mediaDevices is undefined

这下,站点https加密就跑不了,不弄就没法继续玩了。所以,nginx代理的配置除了配置https证书路径,代理后端服务,还得考虑wss,websocket,nginx,mqtt这一串的问题。

nginx代理的配置

nginx配置代理,包括https配置,websocket升级协议,http跳转https。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server {
listen 443 ssl;
server_name abc.def.hij;
ssl_certificate /path/to/abc.def.hij.cer;
ssl_certificate_key /path/to/abc.def.hij.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-ywmy.xyzM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

#charset koi8-r;
access_log /var/log/nginx/abc.host.access.log main;

location / {
root html;
index index.html;
# nginx跨域
add_header 'Access-Control-Allow-Origin' '*';
# 代理后端服务
proxy_pass https://127.0.0.1:port/;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# 升级协议头websocket
proxy_http_version 1.1;
proxy_set_header upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

server {
listen 80;
server_name abc.def.hij;
rewrite ^/(.*) https://$server_name$request_uri? permanent;
}

nginx配置已经完成了反向代理,https,http跳转https,wss协议配置。接下来,到这里,nginx的相关的配置已经完事了。在我自己搭建的过程中,MixIO有一个web后台,可以直接配置证书,不过在我操作保存配置文件后,重启MixIO服务,wss连接依然是报错的,这让我一时也没搞明白是不是自己nginx配置的问题,还是mqtt协议后端路径,还是这个证书,在管理端配置后,实际是不生效的。自己从MixIO的配置文件中,写入申请的证书,重启服务也还是不生效的。所以就一直用http协议来请求网站服务。直到遇到了页面控件添加摄像头的问题。

证书转换

在没办法解决WebRTC API调用,自己只能在MixIO的配置文件中找证书调用的位置,给自己找到了证书的路径,站点的公钥是crt,私钥是pem格式,而自己申请的证书公钥是cer,私钥是key格式。转换也很简单,先验证一下证书的加密方式,只要不是DER格式,直接改后辍就可以了。

验证也很简单。

1
openssl rsa -in your_key.pem -check -noout

如果是DER格式,输出为二进制字符,可以通过openssl转换。

1
openssl rsa -in your_key.key -outform PEM -out your_key.pem

更改证书后辍后,直接替换掉原有的证书文件,重新启动服务,wss连接正常了,一个正常的物连网平台可以正常使用了,到此,部署结束。


MixIO物连网平台搭建
https://ywmy.xyz/2025/02/17/MixIO物连网平台搭建/
作者
ian
发布于
2025年2月17日
许可协议