0
点赞
收藏
分享

微信扫一扫

nginx转发mqtt

罗蓁蓁 2022-10-01 阅读 178
  • docker安装mqtt

docker pull emqx/emqx:v4.0.5
docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.5

http://ip:18083

  • 云服务器开启相关端口
  • emqx关闭匿名认证,开启username插件
  • 使用服务器ip + 18083访问成功
  • nginx转发mqtt_ipad

  • 使用vscode + rest client插件管理用户,测试成功
  • nginx转发mqtt_ipad_02

  • 使用docker安装nginx

docker run -p 80:80 --name my-nginx --restart=always -v /home/mydocker/mynginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/mydocker/mynginx/conf/conf.d:/etc/nginx/conf.d -v /home/mydocker/mynginx/html:/usr/share/nginx/html -v /home/mydocker/mynginx/logs:/var/log/nginx -d nginx

nginx转发mqtt_ipad_03

  • 创建桥接网络

# 查看docker网桥
docker network ls

# 默认情况下有如下3种
NETWORK ID NAME DRIVER SCOPE
9f518686edff bridge bridge local
f8fe62505b26 host host local
28f688f90902 none null local

# 不是以上3种,则为自定义网桥

# 将加入到自定义网桥的镜像,从自定义网桥中移除
docker network rm docker镜像id

# 删除之前自定义的网桥
docker network rm NETWORK_ID

# 清理此容器的网络占用
docker network disconnect --force 网络模式 容器名称
docker network disconnect --force bridge containerName

# 简查是否还有同名容器占用
docker network inspect 网络模式
docker network inspect bridge

# 服务器创建网络
docker network create -d bridge my-bridge

# 将nginx添加到网络
docker network connect my-bridge my-nginx

# 将mqtt添加到网络
docker network connect my-bridge emqx

# 查看nginx的网络
[root@VM-12-15-centos conf.d]# docker inspect 608a3cb87dca | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
"IPAddress": "172.18.0.2",

# 查看emqx的网络
[root@VM-12-15-centos conf.d]# docker inspect 235d39c2a8c4 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
"IPAddress": "172.18.0.4",

# 测试
docker exec -it my-nginx ping emqx
docker exec -it emqx ping my-nginx
# 或则直接进入容器中ping

  • 配置nginx并重启
  • nginx转发mqtt_ipad_04

  • 关闭云服务上的emqx相关的端口

# 访问该地址会通过nginx转发到emqx的登录页面
http://1xx.xxx.xxx.xxx:80/

nginx转发mqtt_Nginx_05

  • 配置nginx,并重启,转发到用户管理接口
  • nginx转发mqtt_ipad_06

  • 在关闭云服务器emqx相关端口的情况下,测试

@hostname = 1xx.xxx.xxx.xxx
@port=8081
@contentType=application/json
@userName=admin
@password=public

#############查看已有用户认证数据##############
GET http://{{hostname}}:{{port}}/api/v4/auth_username HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}

### 通过nginx转发
GET http://1xx.xxx.xxx.xxx:80/mqtt HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}

  • 测试成功
  • nginx转发mqtt_nginx_07



举报

相关推荐

0 条评论