1.需求
我们需要通过域名的方式进行mqtt的链接。这样的好处就是当我们后台ip改变的时候,前端的设备能不受影响。
2.使用nginx进行转发
注意问题:配置反向代理TCP的方式,需要使用nginx的stream服务节点。该节点是和http结点是并列的。
使用的nginx的版本:1.23.0
版本的问题,是因为有些老版本还需要手动安装支持stream。所以如果我们使用了高版本,默认都是支持这些的。
2.1.nginx里的配置文件
我们直接在nginx.conf里配置,因为需要和http同节点。
完整的配置文件也贴一下:
stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/mqtt_access.log proxy;
open_log_file_cache off;
upstream mqtt_tcp_server {
server xxx.xxx.xxx.xxx:1883; #这里要改自己的ip地址
}
server {
listen 1883; #监听端口 也可以使用1883
proxy_connect_timeout 150s;
proxy_timeout 150s;
proxy_pass mqtt_tcp_server; #反向代理地址
proxy_buffer_size 3M;
tcp_nodelay on;
}
}
3.配置完之后,重启nginx不生效
netstat -tunpl
使用该命令,可以查看到我们监听1883端口是否已经起来。刚开始异常的时候,因为使用nginx -t,发现语法没有问题,在使用nginx -s reload命令启动的时候。也没有异常,但最终发现1883端口还是没有起来。我们去查看nginx的error日志,最后发现了一个错误。
2022/06/24 14:48:40 [emerg] 11768#11768: bind() to 0.0.0.0:1883 failed (13: Permission denied)
3.1.这个问题,实际上是SELinux 开放和关闭端口问题;
查看所有开放端口:
semanage port -l
查看某个端口:
查看1883端口是否已经开启来:
semanage port -l | grep 1883
已经启动后的结果。
查看selinux针对http的策略开放的端口:
semanage port -l | grep http_port_t
添加端口:
重点来了,如果上面的结果是没有开放出来,则需要我们手动添加端口进去:
semanage port -a -t http_port_t -p tcp 1883
http策略添加开放1883端口。
关闭http策略的某个端口:
最后,如果在一些时候,我们不需要开启这个端口的时候,则可以关闭该端口:
semanage port -d -t http_port_t -p tcp 1883
看到最后,画重点了,如果您需要(智慧餐厅)有关设备,或者身边有这样的资源,可以推荐给我,达成合作后,你懂的,致富链接: