Bootstrap

Nginx 支持 ws 协议的 MQTT

上一篇文章讲了如何搭建单机的 emq 服务,如果说需要连接的客户端和 emq 服务不在一个网段,就无法访问该服务,接下来为该服务配置一个 nginx 网关,起到一个反向代理的作用。

安装 nginx

基于 ubuntu 20.04 搭建 nginx 环境

sudo apt-get install nginx # 在线安装
nginx -v # 查看 nginx 版本
service nginx start # 启动 nginx

启动成功以后,访问部署 nginx 的主机 http://{主机 IP} 会有如下提示
在这里插入图片描述

# nginx 其他操作命令
service nginx stop # 关闭 nginx 服务
service nginx restart # 重启 nginx 服务

配置 Nginx 网关

配置 nginx.conf

# 进入到 nginx.conf 所在的目录
cd /etc/nginx/
sudo gedit nginx.conf

新增如下内容

http {
    、、、
         map $http_upgrade $connection_upgrade {  
                    default upgrade;  
                    '' close;  
        }  
        upstream mqtt_ws_server {
                    #被代理的服务,可以写多个
                    server XXX.XXX.XXX.XXX:port; 
        }  
        server {  
                    listen 8811;  # nginx 监听的端口
    
                    location / {  
        				proxy_pass http://mqtt_ws_server;
        				proxy_http_version 1.1;  
        				proxy_redirect off; 
        				proxy_set_header Host $host; 
        				proxy_set_header X-Real-IP $remote_addr; 
        				proxy_read_timeout 3600s; 
        				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        				proxy_set_header Upgrade $http_upgrade; 
        				proxy_set_header Connection $connection_upgrade; 
    		}  
        }
}

通过在线测试工具连接 emq 服务验证 nginx 是否配置生效。

注意

实际开发中还是使用 wss 或者 ssl 进行连接较为稳妥。

;