• 使用域名转发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

  • 相关阅读:
    linux C.UTF-8和en-US.UTF-8语言环境有什么区别?(中文乱码问题)locale命令 centos、ubuntu修改编码集(没搞定!)
    C语言-入门-static(十五)
    Tesseract .Net SDK C# OCR 2022.1
    数字货币--暗池
    torch.where()两种用法
    求每个店铺访问次数top3的访客信息
    windows系统下安装linux(centos7)虚拟机详细教程(virtualbox环境)
    Linux:gitlab创建组,创建用户,创建项目
    【Go实现】实践GoF的23种设计模式:迭代器模式
    【特征选择】基于教与学算法实现二进制特征选择问题附matlab代码
  • 原文地址:https://blog.csdn.net/u011442726/article/details/125447289