项目代理关系:
注:主机上已存在名为: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