项目代理关系:

注:主机上已存在名为: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连接请求的更多相关文章

  1. TCP连接建立系列 — 连接请求块

    连接请求块(request_sock)之于TCP三次握手,就如同网络数据包(sk_buff)之于网络协议栈,都是核心的数据结构. 内核版本:3.6 Author:zhangskd @ csdn blo ...

  2. Nginx - 代理、缓存

    Nginx 标签 : nginx 代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送 ...

  3. 使用Nginx代理和转发Websocket连接

    1.Websocket 简介 WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端. 2.Nginx 简介 ...

  4. 实现Nginx代理WSS协议

    因为线上H5游戏需要加上SSL,不想在原来的Web 服务器和游戏服务器支持SSL,只希望 在Nginx代理集群支持SSL.整体架构如下: 从上图可以看出需要总共涉及到https/http 和wss/w ...

  5. http/https与websocket的ws/wss的关系以及通过Nginx的配置

    http/https与websocket的ws/wss的关系 - 哒哒哒 - CSDN博客 https://blog.csdn.net/Garrettzxd/article/details/81674 ...

  6. 关于小程序websocket全套解决方案,Nginx代理wss

    需求对话 提问 我在本地web能够使用ws协议去链接websocket,但是小程序不能使用. 回答 由于小程序使用的是SSL加密协议,所以需要使用wss.这里wss与ws的关系就相当于https于ht ...

  7. Nginx代理tcp端口实现负载均衡

    Nginx代理tcp端口实现负载均衡 1.修改配置文件 vi /etc/nginx/nginx.conf 添加如下配置: stream { ###XXX upstream notify {   has ...

  8. Nginx代理TCP服务

    利用nginx代理tpc 部署nginx 安装编译所需环境 # yum install -y apr-devel apr-util-devel pcre-devel openssl-devel 添加w ...

  9. Nginx代理websocket为什么要这样做?

    Nginx反向代理websocket 示例: http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } s ...

  10. nginx 代理 websocket

    nginx 代理 websocket nginx 首先确认版本必须是1.3以上 map指令的作用: 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_up ...

随机推荐

  1. MySQL-mysqldump 报错:[ERROR] unknown variable 'local_infile=1'.

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin mysqldump: [ERROR] unknown variable 'local_infile=1'. 解决方法: ...

  2. [python] 基于Tablib库处理表格数据

    Tablib是一个用于处理电子表格(如 Excel,CSV,JSON)的Python 库.它提供了一种简单而强大的方式来操作和处理数据.利用Tablib,我们可以轻松地读取.写入.过滤和转换各种类型的 ...

  3. Mysql不同数据库之间表结构同步

    开发环境的Mysql表结构做了修改,要同步到其他环境数据库中使用数据库管理工具JookDB的表结构同步功能就很方便.虽然Navicat也有这个功能但是有免费的当然是用免费的. 用JookDB添加数据库 ...

  4. .NET8极致性能优化AOT

    前言 .NET8对于性能的优化是方方面面的,所以AOT预编译机器码也是不例外的.本篇来看下对于AOT的优化.原文:.NET8极致性能优化AOT 详述 首先明确一个概念,.NET里面的AOT它是原生的. ...

  5. linux-ELK安装配置

    前言:   ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana.    • Elasticsearch 是一个搜索和分析引擎.     ...

  6. Nougat:结合光学神经网络,引领学术PDF文档的智能解析、挖掘学术论文PDF的价值

    Nougat:结合光学神经网络,引领学术PDF文档的智能解析.挖掘学术论文PDF的价值 这是Nougat的官方存储库,Nougat是一种学术文档PDF解析器,可以理解LaTeX数学和表格. Proje ...

  7. IDEA在new对象的时候不显示其parameter

    问题现象 最近安装了一个IDEA2023.1版本,出现了new对象不显示相关构造参数 解决办法 在IDEA的设置中开启相关提示 勾选上面的几个设置,保存 效果

  8. MinIO客户端之alias

    MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc alias mc alias list mc alias remove mc alias set mc al ...

  9. Ubuntu 命令使用方法

    apt-get 用作于deb包 yum作用于tar包(也可以运作于rpm包) 首先用yum list wget检查一下你的虚拟机有没有安装wget,如果安装了下面图中会显示 @dvd ,我的没有安装所 ...

  10. zabbix常用监控项

    https://blog.csdn.net/xkjcf/article/details/78559273?locationNum=10&fps=1 agent.ping  #agent是否在线 ...