使用nginx代理emqx的TCP、WS、WSS连接请求
项目代理关系:

注:主机上已存在名为:nginx-proxy 的一级 nginx 的代理,将监听了主机的 80、443端口
docker-compose.yml
version: "3.7"
services:
emqx:
image: emqx/emqx:4.4.18
restart: unless-stopped
container_name: emqx
environment:
EMQX_ADMIN_PASSWORD: 80201@qq.com #设置EMQX的Web管理程序登录的admin账户,密码为admin
TZ: Asia/Shanghai
VIRTUAL_HOST: manager.xxx.com.cn #设置nginx-proxy对 80 端口上的 manager.xx.com.cn 的请求,转发到本容器 18083 端口上(下面的 18083)
VIRTUAL_PORT: 18083
networks:
- emqx-network
volumes: #将 EMQX 配置信息映射到宿主机 /home/emqx ,其中包含 EMQX TCP 用户连接认证信息
- /home/emqx/etc:/opt/emqx/etc
- /home/emqx/data:/opt/emqx/data
- /home/emqx/lib:/opt/emqx/lib
- /home/emqx/log:/opt/emqx/log
#使用 Nginx 容器 mqtt 代理 EMQX TCP连接服务,因此将宿主机的 1882 与 本容器的 80 端口进行映射。
#这个容器不需要关联域名,因为只要将 TCP 服务相关的域名解析到宿主机 IP 上,就可发起对1882端口的请求。
#该 Nginx 容器同为一级代理
nginx:
image: nginx:1.25.3
restart: always
container_name: mqtt
volumes:
- /home/emqx/nginx/mqtt/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- emqx
ports:
- 1882:80
networks:
- emqx-network
#使用 Nginx 容器 ws/wss 代理 EMQX ws 连接请求
#因此使用 VIRTUAL_HOST: ws.xxx.com.cn 指明将 nginx-proxy 上对 ws.xxx.com.cn 的请求,转发到本容器上。
#该 Nginx 容器为 nginx-proxy 下的 二级代理
nginx:
image: nginx:1.25.3
restart: always
container_name: ws
volumes:
- /home/emqx/nginx/ws/conf.d:/etc/nginx/conf.d
depends_on:
- emqx
environment:
VIRTUAL_HOST: ws.xxx.com.cn #设置nginx-proxy 一级代理,将对域名 ws.xx.com.cn 请求,转发到本容器的80端口上。
networks:
- emqx-network
networks:
emqx-network:
external: true
Nginx容器 mqtt 的 nginx.conf 配置信息
user nginx;
worker_processes auto; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections 1024;
}
#stream 为TCP代理设置,这个 Nginx 仅代理 TCP,不代理 HTTP。因此没有 HTTP 配置节点
stream {
server {
listen 80; #将来自容器的 80 端口的TCP请求,转发到 emqx 容器的 1883 端口上 proxy_connect_timeout 60s;
proxy_timeout 60s;
tcp_nodelay on;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
#ssl_certificate /home/zyzx/STAR_haut_edu_cn.crt;#这里需要填写证书的地址,可以是pem或者crt
#ssl_certificate_key /home/zyzx/STAR_haut_edu_cn.key;#这里需要填写证书key的地址
proxy_pass emqx:1883;
}
}
Nginx容器 ws 的 default.conf 配置信息
server {
listen 80;
ssl off;
client_max_body_size 10M;
location /mqtt {
#将容器80端口收到的请求,转发到emqx的8083端口
proxy_pass http://emqx:8083/mqtt; #这里是否带/mqtt路径处决于你mqtt服务端部署
proxy_redirect off;
proxy_set_header Host $host;
# 反向代理保留客户端地址
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
# WebSocket 额外请求头
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
注:关于WSS SSL证书。因为本案例使用了Nginx-Proxy一级代理,所有的SSL证书均部署在其下面。当使用wss://ws.xxx.com.cn请求时,一级代理将处理证书相关的工作。然后将实际请求转发到Nginx ws 80端口上,Nginx ws再将请求转发到emqx的8083端口,因此上述配置支持 ws/wss 请求 ws.xxx.com.cn。
使用nginx代理emqx的TCP、WS、WSS连接请求的更多相关文章
- TCP连接建立系列 — 连接请求块
连接请求块(request_sock)之于TCP三次握手,就如同网络数据包(sk_buff)之于网络协议栈,都是核心的数据结构. 内核版本:3.6 Author:zhangskd @ csdn blo ...
- Nginx - 代理、缓存
Nginx 标签 : nginx 代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送 ...
- 使用Nginx代理和转发Websocket连接
1.Websocket 简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. 2.Nginx 简介 ...
- 实现Nginx代理WSS协议
因为线上H5游戏需要加上SSL,不想在原来的Web 服务器和游戏服务器支持SSL,只希望 在Nginx代理集群支持SSL.整体架构如下: 从上图可以看出需要总共涉及到https/http 和wss/w ...
- http/https与websocket的ws/wss的关系以及通过Nginx的配置
http/https与websocket的ws/wss的关系 - 哒哒哒 - CSDN博客 https://blog.csdn.net/Garrettzxd/article/details/81674 ...
- 关于小程序websocket全套解决方案,Nginx代理wss
需求对话 提问 我在本地web能够使用ws协议去链接websocket,但是小程序不能使用. 回答 由于小程序使用的是SSL加密协议,所以需要使用wss.这里wss与ws的关系就相当于https于ht ...
- Nginx代理tcp端口实现负载均衡
Nginx代理tcp端口实现负载均衡 1.修改配置文件 vi /etc/nginx/nginx.conf 添加如下配置: stream { ###XXX upstream notify { has ...
- Nginx代理TCP服务
利用nginx代理tpc 部署nginx 安装编译所需环境 # yum install -y apr-devel apr-util-devel pcre-devel openssl-devel 添加w ...
- Nginx代理websocket为什么要这样做?
Nginx反向代理websocket 示例: http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } s ...
- nginx 代理 websocket
nginx 代理 websocket nginx 首先确认版本必须是1.3以上 map指令的作用: 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_up ...
随机推荐
- 普冉PY32系列(十二) 基于PY32F002A的6+1通道遥控小车III - 驱动篇
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- 【Android】Android Bmob后端云配置
简介 开发一个具有网络功能的应用,在Bmob移动应用云存储平台中,只需要注册一个账号,就可以实现申请创建任意多个数据库,获得对应的key,下载对应版本的SDK,并嵌入到移动应用中,调用存取的KPI,进 ...
- jmeter工具中vars与props命令的区别和使用
话不多说直接干活!!!!! vars 和 props命令存在于"jsr223 预处理器"."BeanShell 预处理程序"."JSR223 后置处理 ...
- AtCoder_abc331
AtCoder_abc331 (这次题真的真的真的好难) 比赛链接 A - Tomorrow 题目链接 题目大意 有一个\(M\)个月,\(D\)天的日历,请输出\(y年m月z日\)的下一天. 解题思 ...
- MySQL索引命名规范
[强制]主键索引名为 pk_字段名:唯一索引名为 uk_字段名:普通索引名则为 idx_字段名 说明:pk_ 即 primary key:uk_ 即 unique key:idx_ 即 index 的 ...
- Json Schema简介和Json Schema的.net实现库 LateApexEarlySpeed.Json.Schema
什么是Json Schema ? Json Schema是一种声明式语言,它可以用来标识Json的结构,数据类型和数据的具体限制,它提供了描述期望Json结构的标准化方法. 利用Json Schema ...
- 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
引言 哈喽.大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.net mvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery ...
- 生产升级JDK 17 必读手册
原文点这里,查看更多优质文章 DK 17 在 2021 年 9 月 14 号正式发布了!根据发布的规划,这次发布的 JDK 17 是一个长期维护的版本(LTS). Java 17 提供了数千个性能.稳 ...
- Rust实现线段树和懒标记
参考各家代码,用Rust实现了线段树和懒标记. 由于使用了泛型,很多操作都要用闭包自定义实现. 看代码. // 线段树定义 pub struct SegmentTree<T: Clone> ...
- zookeeper源码(05)数据存储
本文详细分析一下zookeeper的数据存储. ZKDatabase 维护zookeeper服务器内存数据库,包括session.dataTree和committedlog数据,从磁盘读取日志和快照后 ...