展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

nginx转发mqtt

  • 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访问成功

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

  • 使用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

  • 创建桥接网络
# 查看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并重启

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

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

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

  • 在关闭云服务器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}}
  • 测试成功
posted @   DogLeftover  阅读(597)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示