首页 > 系统相关 >使用nginx代理emqx的TCP、WS、WSS连接请求

使用nginx代理emqx的TCP、WS、WSS连接请求

时间:2024-01-17 19:23:55浏览次数:24  
标签:Nginx 端口 TCP nginx WSS ws proxy emqx

项目代理关系:

 

注:主机上已存在名为: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: [email protected]     #设置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,端口,TCP,nginx,WSS,ws,proxy,emqx
From: https://www.cnblogs.com/dw039/p/17970845

相关文章

  • TCP 拥塞控制对数据延迟的影响
    哈喽大家好,我是咸鱼今天分享一篇文章,是关于TCP拥塞控制对数据延迟产生的影响的。作者在服务延迟变高之后进行抓包分析,结果发现时间花在了TCP本身的机制上面:客户端并不是将请求一股脑发送给服务端,而是只发送了一部分,等到接收到服务端的ACK,然后继续再发送,这就造成了额外的RTT......
  • Docker初级:Docker安装部署Nginx、Tomcat
    Docker初级:Docker安装部署Nginx、Tomcat:https://blog.csdn.net/Zp_insist/article/details/127636875?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170548607116800188590783%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170548......
  • 利用nginx搭建rtmp流服务器
    1、RTMP介绍RTMP全程RealTimeProtocal(实时小时传输协议)。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS、RTMPE等多种变种协议。RTMP是是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数......
  • 微软用它取代了`Nginx`吞吐量提升了百分之八十!
    微软用它取代了`Nginx`吞吐量提升了百分之八十! Azure应用服务用YARP取代了Nginx,获得了80%以上的吞吐量。他们每天处理160B多个请求(1.9mRPS)。这是微软的一项了不起的技术创新。首先我们来介绍一下什么是YarpYarp是什么?YARP(YetAnotherReverseProxy)是一个开源的、高......
  • nginx的https证书自动续期
    nginx的https证书自动续期本文讲述nginx的https证书如何自动续期。顺便讲述如何手动续期,如何方便地管理所有域名证书。有很多实现方案,包括收费方案和免费方案,本文采用的是acme.sh方案。1.安装acme客户端需要将系统环境切换到root用户下执行,否则安装证书时可能会失败......
  • 16、nginx缓存机制
    1.proxy_cache相关指令Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。1.1proxy_cache指令语法:proxy_cachezone_name;默认值:None使用环境:http......
  • 网络编程之TCP协议的三次握手和四次挥手
    引言见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。面试官:然后呢?求职者:这就是三次......
  • 网络编程之基于TCP协议的socket套接字编程
    基于TCP的套接字【1】方法简介tcp是基于链接的必须先启动服务端然后再启动客户端去链接服务端tcp服务端server=socket()#创建服务器套接字server.bind()#把地址绑定到套接字server.listen()#监听链接inf_loop:#服务器无限循环conn=serv......
  • 网络编程TCP UDP
    网络编程(1)什么是网络编程网络编程是指通过编程语言在计算机之间建立通信的一种方式。它是在互联网上进行数据传输的关键组成部分,使计算机能够相互通信、交换信息和共享资源。网络编程涉及许多不同的技术和协议,包括TCP/IP(传输控制协议/因特网协议),HTTP(超文本传输协议),FTP(文件传......
  • 15、nginx的rewrite机制
    1.概述Rewrite主要的功能就是实现URL的重写。Nginx的Rewrite规则采用PCRE(PerlCompatibleRegularExpressions)Perl兼容正则表达式的语法进行规则匹配。通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。例如,一些使用MVC框架的程序只有一个入口,可以通过......