一、mosquito.conf开启相应的端口和协议

本示例的目录:mosquito.conf位于/etc/mosquito/mosquito.conf下。

命令:

vi /etc/mosquito/mosquito.conf

【i】 进入编辑模式

添加以下代码,如果有则把#注释去掉

#MQTT协议
port 1883
protocol mqtt
#websockets协议
listener 8083 
protocol websockets
#如果需要查看websockets日志还可以加入以下面,上面有提过。
log_type websockets
websockets_log_level 0

【ESC】退出编辑模式
输入:wq 保存退出

△这里是很关键的一步。

二、Nginx 配置socket转发

本实例是基于Lnmp下的nginx来进行配置,示例网站为iot.xx.com

我要实现是
iot.xx.com/mqtt 进行转发。

我的vhost配置文件在/usr/local/nginx/conf/vhost/iot.xx.com.conf

server{
}

在这上面添加以下代码

map $http_upgrade $connection_upgrade{
    default upgrade;
    '' close;
}

没有添加以上代码,下面引用时候就会报$connection_upgrade错误

然后在server{}里面包含位置添加转发代码

#socket转发
location /mqtt {
        proxy_pass http://127.0.0.1:8083/;
        proxy_http_version 1.1;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Host $host;
        proxy_set_header Http-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
}

在这里我踩了不少坑。都无法进行访问。搜索百度也无法解决。最后在一篇攻略中受到启发。并记录下来。

重启服务Nginx

lnmp nginx reload

OK 完成以上几步就可以轻松进行测试了。

这里推荐两个socket在线测试平台

A、jsons http://www.jsons.cn/websocket/
B、yunjson http://www.yunjson.com/websocket/
046.png

标签: mqtt, mosquitto, socket, websocket