搭建物联网环境
搭建物联网服务器的方式有很多种,趁着腾讯云服务器,还有域名没过期,我把物联网服务器建在我的云服务器上了。不过我也试过通过花生壳进行内网穿透,把物联网服务端建在本地,其实原理都是差不多的。
- 第一步:在云服务器上安装EMQ
因为我的云服务器是Windows的所以这里我下载的Windows版本,这是网址:
EMQX官网。
打开官网可以下载emqx broker,也有使用文档,可以参考。
下载之后的压缩包解压之后是这样的
打开bin目录,在bin目录中按住shift点击鼠标右键,在弹出菜单栏中选“在此处打开命令行”,输入emq命令。
此时出现的是可操作命令,输入emqx install开始安装,在命令行可以重新输入时表示安装成功,然后输入“emqx start”启动emqx服务。
打开浏览器输入“localhost:18083”
完成这部分操作就算安装成功了,默认的账号是admin,密码是public。 - 第二步:安装wnmp套件
我使用的是宝塔服务器套件,这里主要用到的是Nginx,但是因为我的云服务器还要搭建我的个人网站所以我用的是wnmp套件。最开始我打算自己一步一步的分别将nginx,mysql,php安装上但是太麻烦了,所以最后选择使用宝塔面板,傻瓜式的安装。
在官网上下载完毕后点击安装即可,下面主要是配置过程。我在购买云服务器的时候,也购买了一个域名(注意要备案哦,不然域名不能用,备案大概需要十多天),同时腾讯云也会送一个ssl证书,可以到腾讯云助手申请,这些都是缺一不可的。因为微信小程序的安全机制,如果要通过域名连接物联网服务器,必须要在项目配置中配置合法域名。
箭头中第一个是我在花生壳购买的域名,第二个是我在腾讯云上购买的域名,都是要有安全证书的,宝塔面板可以安装安全证书。在浏览器端打开宝塔面板,在设置中进行配置。
申请好的证书,会有一个压缩包打开有Apache,IIS,Nginx,Tomcat版本的,点开Nginx版本,将***.crt打开全部复制到“证书(PEM格式)”中,再把**.key打开全部复制到“密钥(KEY)”然后保存,可以打开强制HTTPS开关,打开后就只能通过HTTPS来访问。
注意:如果不能通过域名访问,说明端口没有开放,web端宝塔面板的端口是8888,所以需要在安全组中进行配置开放,腾讯云的端口似乎既要在云服务器控制台安全组开放,又要在云服务器的防火墙中打开才行。
这些是我的安全组,在云服务器控制台配置好安全组,然后在云服务器中把对应端口打开即可。 - 第三步:配置反向代理
安装好wnmp套件还需要对Nginx的配置文件配置,因为微信小程序默认用443端口,而我们要使用的是8083端口来连接mqtt服务端,所以需要用到Nginx来做反向代理,让服务器监听443端口,然后转发8083端口,这样就可以通过微信小程序连接到mqtt服务端啦。
在Nginx网站配置文件中添加这样一段
location = /mqtt {
proxy_pass http://www.domain.com:8083; #修改为你的域名
proxy_redirect off;
proxy_set_header Host 0.0.0.0:8083; #修改为你的服务器IP
proxy_set_header Sec-WebSocket-Protocol mqtt;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
以下是完整的配置文件:
server
{
listen 80;
listen 443 ssl;
server_name www.domain.com;
index index.php index.html index.htm default.php default.htm default.html;
root C:/wwwroot/www.domain.com/.../public/;
#START-ERROR-PAGE
#error_page 403 /403.html;
error_page 404 /404.html;
#error_page 502 /502.html;
#END-ERROR-PAGE
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
#LIMIT_INFO_START
#LIMIT_INFO_END
#SSL-INFO-START
ssl_certificate ssl/www.domain.com/fullchain.pem;
ssl_certificate_key ssl/www.domain.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-INFO-END
#反代清理缓存配置
location ~ /purge(/.*) {
proxy_cache_purge cache_one $1$is_args$args;
}
location = /mqtt {
proxy_pass http://www.domain.com:8083;
proxy_redirect off;
proxy_set_header Host 0.0.0.0:8083;
proxy_set_header Sec-WebSocket-Protocol mqtt;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#proxy 反向代理
include proxy/www.domain.com/*.conf;
#PHP-INFO-START
include php/54.conf;
#PHP-INFO-END
#REWRITE-START
include rewritewww.domain.com/*.conf;
#REWRITE-END
#redirect 重定向
include redirect/www.domain.com/*.conf;
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
access_log C:/BtSoft/wwwlogs/www.domain.com.log;
error_log C:/BtSoft/wwwlogs/www.domain.com.error.log;
}
注意这个网站目录下的Nginx配置文件,在首页中
点击之后可以修改全局的Nginx配置文件,那既然有全局的配置文件,网站的配置文件是怎么生效的呢
全局配置这里引入了站点的配置文件,所以可以生效了。
参考:https://blog.csdn.net/xh870189248/article/details/84070944
个人能力有限,有什么错误的地方欢迎指正,有问题也可以提,可以一起探讨