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


    1.需求

    我们需要通过域名的方式进行mqtt的链接。这样的好处就是当我们后台ip改变的时候,前端的设备能不受影响。

    2.使用nginx进行转发

    注意问题:配置反向代理TCP的方式,需要使用nginx的stream服务节点。该节点是和http结点是并列的。

    使用的nginx的版本:1.23.0

     版本的问题,是因为有些老版本还需要手动安装支持stream。所以如果我们使用了高版本,默认都是支持这些的。

    2.1.nginx里的配置文件

     我们直接在nginx.conf里配置,因为需要和http同节点。

    完整的配置文件也贴一下:

    1. stream {
    2. log_format proxy '$remote_addr [$time_local] '
    3. '$protocol $status $bytes_sent $bytes_received '
    4. '$session_time "$upstream_addr" '
    5. '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    6. access_log /var/log/nginx/mqtt_access.log proxy;
    7. open_log_file_cache off;
    8. upstream mqtt_tcp_server {
    9. server xxx.xxx.xxx.xxx:1883; #这里要改自己的ip地址
    10. }
    11. server {
    12. listen 1883; #监听端口 也可以使用1883
    13. proxy_connect_timeout 150s;
    14. proxy_timeout 150s;
    15. proxy_pass mqtt_tcp_server; #反向代理地址
    16. proxy_buffer_size 3M;
    17. tcp_nodelay on;
    18. }
    19. }

    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

  • 相关阅读:
    Winnovative Excel To PDF Converter for .NET
    【强化学习】时间循环最优决策:原理与Python实战
    如何一键重装Win7系统 便捷重装Win7系统教程
    python找出文件夹里文件名以特定字符结尾的文件并移动到另一个目录
    【Java】封装的实现,访问限定符、包
    MySQL事务隔离与行锁的关系
    CNN卷积神经网络
    pytorch初学笔记(六):DataLoader的使用
    [数据库]数据管理技术的发展阶段
    dockerfile 快速部署jar项目运行
  • 原文地址:https://blog.csdn.net/u011442726/article/details/125447289