使用域名转发mqtt协议,避坑指南

本文介绍了如何通过Nginx配置TCP反向代理实现MQTT服务的域名连接,确保后台IP变化时前端设备仍能正常连接。在配置过程中,遇到SELinux权限问题导致1883端口无法监听,通过`semanage port`命令检查和添加端口策略解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

​看到最后,画重点了,如果您需要(智慧餐厅)有关设备,或者身边有这样的资源,可以推荐给我,达成合作后,你懂的,致富链接:

未来餐饮革命:加入我们的“智能餐厅”代理、自主开拓市场计划!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿小飞

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值